我像这样抽象我的模型:首先有一个类UserInfo
来保存用户信息:
public class UserInfo extends Application{
private int userid;
public void setUserId(int id)
{
userid=id;
}
public int getUserId()
{
return userid;
}
}
然后在MainActivity中:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
userinfo=(UserInfo)getApplication();
userinfo.setUserId(1354);
....
Intent intent=new Intent(MainActivity.this,VoteActivity.class);
startActivity(intent);
}
public
@Override void onResume()
{
super.onResume();
TextView text=(TextView)MainActivity.this.findViewById(R.id.usernameText);
text.setText(userinfo.getUserId()+" ");
}
在VoteActivity中:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_vote);
userinfo=(UserInfo)getApplication();
Button back=(Button)findViewById(R.id.backButton);
back.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
userinfo.setUserId(-100);
Intent intent=new Intent(VoteActivity.this,MainActivity.class);
startActivity(intent);
}});
}
结果是:当MainActivity首次运行时,UserInfo中的userid为1354;当VoteActivity首次运行时,UserInfo中的userid也是1354.但是当从VoteAcitivy返回MainActivity时,userid仍然是1354,应该是-100。这种使用Application上下文有什么问题?
答案 0 :(得分:1)
您正在onClick方法中开始一项新活动:
Intent intent=new Intent(VoteActivity.this,MainActivity.class);
startActivity(intent);
您可以直接在MainActivity中设置您的ID:
userinfo.setUserId(1354);
这就是你得到的原因(1354)。您应该在点击时调用完成(而不是启动MainActivity)。
活动的堆栈如下所示:MainActivity - VoteActivity - MainActivity
我认为您希望它看起来像这样:MainActivity
后按Button
@Override
public void onClick(View arg0) {
userinfo.setUserId(-100);
finish();
}});
答案 1 :(得分:0)
你是如何回到MainActivity
的?按设备的后退按钮或点击按钮?如果按下设备的后退按钮,则不会调用onClickListener,这就是为什么id保持不变的原因。
答案 2 :(得分:0)
@Override
public void onClick(View arg0) {
userinfo.setUserId(-100);
Intent intent=new Intent(VoteActivity.this,MainActivity.class);
startActivity(intent);
}});
单击后退按钮时,重新启动MainActivity。 MainActivity onCreate将再次被执行。 MainActivity
是否已标记为singleInstance
?