【问题标题】:Maintain Activity State with two Activities使用两个活动维护活动状态
【发布时间】:2016-08-11 04:01:01
【问题描述】:

我们有一个包含两个Activity MainActivity 和PageTwo 的Android App。在 MainActivity 中,我们有一个 EditText 小部件设置为仅接受数字输入,以及一个借助 Intent 转到下一个活动的 Button。在第二个活动 PageTwo 上,我们有一个 Button,它通过 Intent 将用户返回到 MainActivity。当我们在 EditText 字段中输入一个值并从 MainActivity 到 PageTwo 活动并返回时,除非您使用设备(模拟器)返回按钮,否则该值似乎会被删除。我正在尝试维护这个 EditText 变量的活动状态

代码 sn-ps

 EditText ETage;
 int vAGE;
 static final String V_AGE = "vAGE"; //KeyValue Pair

@Override
public void onSaveInstanceState(Bundle outState){
    outState.putInt(V_AGE,vAGE);
    super.onSaveInstanceState(outState);
}

//@Override
public void onRestoreInstanceState(Bundle savedInstanceState){
    super.onRestoreInstanceState(savedInstanceState);
    vAGE = savedInstanceState.getInt(V_AGE);
    ETage.setText(String.valueOf(vAGE));
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //if(savedInstanceState != null){
        //vAGE = savedInstanceState.getChar(V_AGE);
    //}
    setContentView(R.layout.activity_main);

  ETage = (EditText)findViewById(R.id.editTextAge); 

【问题讨论】:

  • 据我了解,您已经在第二个 Activity 之上启动了第一个 Activity 的新实例。要“返回”到实际的第一个活动,请从第二个活动中调用 finish()
  • @cricket_007finish() 成功了,谢谢我只有 10 个代表点,所以我不确定我能不能给你信用让我烦恼的是,同样的问题是询问使用意图的方向跨度>
  • 显示返回 MainActivity 的 pagetwo 代码

标签: android android-intent activity-state


【解决方案1】:

如果你想回到之前的活动,你为什么要调用意图?只需将onBackPressed(); 写在onClick 内即可

示例

btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        onBackPressed();
    }
});

或者如果你真的想使用 Intent,你可以随时使用 finish()

示例

btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        Intent i = new Intent(PageTwo.this, MainActivity.class);            
        startActivity(i);
        finish();
    }
});

【讨论】:

  • 我的两个捆绑包是保留还是可以删除
  • 如果您使用第一种方法。删除它们。如果您使用第二个,则需要保留它们。
  • puohit 尝试了你的代码,如果我们只是输入 finish() 而没有意图,那么它会失败
  • 调用finish() 与我所说的第一种方法相同。
  • 您应该从第二个示例中删除意图部分,主要是因为它只会创建 MainActivity 的新实例
【解决方案2】:

PageTwo 第二个活动中,不要带着意图返回MainActivity。简单地说,在按钮点击中执行以下操作:

super.onBackPressed(); // this instead of intent to start MainActivity

【讨论】:

  • 试图在 onClick(View v) 下输入该行代码但没有结果错误无法解析方法
  • @James_Duh 这不太可能,您使用的是什么活动课程...?顺便说一句,你也可以用finish() 解决这个问题。
  • Intent intent = new Intent(PageTwo.this,MainActivity.class)
  • @James_Duh 不,您说您在super.onBackPressed() 中遇到“无法解析方法”错误。所以,我在问你在扩展什么 Activity 类?
  • 不扩展 Activity 类我们正在扩展 AppCompatActivity 我想保留操作栏如果我们只扩展 Activity 不知道该怎么做
【解决方案3】:

根据我从您的问题中了解到的情况,您可以在第二页中这样做:

@Override
public void onBackPressed() {
    super.onBackPressed();

Intent intent = new   Intent(SecondActivity.this,MainActivity.class);
        startActivity(intent);

}

【讨论】:

  • 这可能不会改变任何事情。因为,在后面的压力下,他已经得到了正确的结果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多