如何在我导航回来的活动中保留属性?

时间:2014-04-22 21:21:37

标签: android android-intent android-lifecycle android-navigation

我基本上设置了一些活动,如下所示(点击是ListViews)。

转到MyChild1的父类方法

public void onItemClick(int pos){
    Intent i = new Intent(this, MyChild1.class);
    i.putExtra("KEY1", myAdapter.getItem(pos).getId());
    startActivity(i);
}

MyChild1类方法转到MyChild2

public void onItemClick(int pos){
    Intent i = new Intent(this, MyChild2.class);
    i.putExtra("KEY2", myAdapter2.getItem(pos).getId());
    startActivity(i);
}

所以你看到我有一个父母,一个孩子和一个孙子活动。孩子根据父母提供的身份进行充气,孙子根据孩子的身份进行充气。这很好用。但是,当我从孙子使用 up 导航回到孩子时,它不再具有从父级到正确膨胀所需的id。我需要支持 up 导航,因为孩子可以根据孙子中的动作进行更改。

我可以将父母的ID一直传递给孙子活动,但我不知道如何将其传回来。我怎么处理这个?

编辑:更多上下文代码 这是我在onCreate上的活动。

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_course);

        if (savedInstanceState == null) {
            getSupportFragmentManager().beginTransaction()
                    .add(R.id.container, new CourseActivityFragment()).commit();
            Intent intent = getIntent();
            courseId = intent.getIntExtra(MainFragment.COURSE_ID, 0);
            System.out.println("the saved state was null");
                    // The above prints, so I know it enters this if statement
        } else {
            courseId = savedInstanceState.getInt(COURSE_ID);
        }
    }

这是我的onSaveInstanceState

@Override
    public void onSaveInstanceState(Bundle savedInstanceState){
        // Save current CourseId
        savedInstanceState.putInt(COURSE_ID, courseId);
        // Call superclass to save view hierarchy state
        super.onSaveInstanceState(savedInstanceState);
    }

2 个答案:

答案 0 :(得分:2)

而不是startActivity,请使用startActivityForResult

Intent intent = new Intent(ParentClass.this, ChildClass.class);
startActivityForResult(intent, RequestCode);

在子类中,在intent中设置一些参数以在Parent类中标识。

Intent intent = getIntent();    
intent.putExtra(<Key>, <Value>);

在父类中,覆盖onActivityResult方法,并检查该键的值

@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent)
{
     if (requestCode == RequestCode)
     {
          //Do something   
     }
}

答案 1 :(得分:1)

我不太关注你的需求,所以我希望这会有所帮助。将其作为成员变量保存在Activity类中。用户离开此活动后,活动的对象不会被销毁。如果仍然发生并且Android会终止您的活动,您可以使用onSaveInstanceState()restoreInstanceState()方法来恢复此ID。