更改为其他活动时保持活动状态

时间:2015-11-09 21:53:24

标签: android android-activity

我有以下情况:

  1. 活动A>活动B
  2. 活动A<活动B
  3. 我想要做的是在点击活动B的后退按钮时保持活动A的状态。

    活动A代码:

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_product_details);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        if (toolbar != null)
        {
            setSupportActionBar(toolbar);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        }
    
        // check for saved instance
        if (savedInstanceState != null)
        {
            //restore saved values
        } 
        else
        {
            //initialize members with default values
        }
    }
    
    
    @Override
    public void onSaveInstanceState(Bundle savedInstanceState)
    {
        savedInstanceState.putString("typeID", typeID);
    
        super.onSaveInstanceState(savedInstanceState);
    }
    
    
    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState)
    {
        super.onRestoreInstanceState(savedInstanceState);
    
        typeID = savedInstanceState.getString("typeID");
    }
    
    public boolean gotoActivityB(View view)
    {
        Intent intent = new Intent(getApplicationContext(), ActivityB.class);
        startActivity(intent);
    
        return false;
    }
    

    活动B代码:

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_buy_item);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        if (toolbar != null)
        {
            setSupportActionBar(toolbar);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        }
    
    
        //do some magic...
    }
    
    public boolean onOptionsItemSelected(MenuItem item)
    {
        Intent intent = new Intent(getApplicationContext(), ActivityA.class);
        startActivity(intent);
    
        return false;
    }
    

    每次从活动B转到活动A时,savedInstanceState等于null,换句话说,活动A状态不会被保存或恢复。

    我在这里缺少什么?

    !! SOLUTION !!

    根据 @cybersam 的回答,活动默认维持其状态。因此不需要savedInstanceState。为了解决我的问题,我只需要将我的后退按钮事件更新为:

    public boolean onOptionsItemSelected(MenuItem item)
    {
        finish();
    
        return true;
    }
    

1 个答案:

答案 0 :(得分:2)

正如onSaveInstanceState()所述的文档:

  

调用onPause()时的示例,而不是   onSaveInstanceState(Bundle)是在前面启动活动B的时候   活动 - 答:系统可能会避免调用onSaveInstanceState(Bundle)   活动A,如果它在B的生命周期内没有被杀死,因为   A的用户界面状态将保持不变。

因此,您无法假设onSaveInstanceState()只会因为A在其前面发起而被调用B。事实上,大部分时间,它都不会。

[EDITED]

您的B代码似乎是将startActivity()调用为"返回"到之前的活动。如果你只想让B回到之前的活动,你可以(通常)只调用finish()来退出B,这应该允许A重新出现(其状态完好无损),因为它将成为{{{ 3}}