0

我像这样抽象我的模型:首先有一个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()+" ");
}

在投票活动中:

@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 中的用户 ID 也是 1354。但是当从 VoteAcitivy 回到 MainActivity 时,用户 ID 仍然是 1354,应该是 -100。这种使用应用程序上下文有什么问题?

4

3 回答 3

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();

        }});
于 2013-05-14T14:31:47.883 回答
0

你怎么回来的MainActivity?按下设备的后退按钮或单击您的按钮?如果您按下设备的后退按钮,您的 onClickListener 将不会被调用,这就是 id 保持不变的原因。

于 2013-05-14T14:37:38.503 回答
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为?

于 2013-05-14T14:37:47.717 回答