在Android中使用Application上下文有什么问题?

时间:2013-05-14 14:28:39

标签: android android-activity applicationcontext

我像这样抽象我的模型:首先有一个类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上下文有什么问题?

3 个答案:

答案 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