在处理多个活动时使用意图数据

Working with intent data when dealing with several activities

我有几个链接在一起的活动。有: Activity_1 -> Activity_2 -> Activity_3 其中 activity 1 是 activity 2 的 parent 而 activity 2 是 activity 3 的 parent。清单如下:

<activity android:name=".Activity_1"
...>
<activity android:name=".Activity_2">
     <meta-data
       android:name="android.support.PARENT_ACTIVITY"
       android:value=".activities.Activity_1" />
</activity>
<activity android:name=".Activity_3">
     <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value=".activities.Activity_2" />

</activity>

Activity_1 适配器中,我通过 onclick 侦听器(通过适配器)将一些数据发送到 Activity_2

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

                    Intent intent = new Intent(v.getContext(), Activity_2.class);
                    intent.putExtra("title",title.getText());
                    v.getContext().startActivity(intent);
                }
            });

并在 Activity_2 中检索数据:

....
private String title;
....
 @Override
protected void onCreate(Bundle savedInstanceState) {
  Bundle extras = getIntent().getExtras();
   if (extras != null) {
     title = extras.getString("title");
   }
   ...
   // some important usage of title here

我有另一个 onclick 侦听器,从 activity 2 到 activity 3,当我单击后退按钮时,应用程序崩溃,因为返回了标题 null

我不想使用首选项来存储标题,知道如何避免这种情况吗?

您似乎是在从 Activity1 -> Activity2 以及从 Activity3 -> Activity2 返回的 onResume 期间从 Intent 获取信息。

您可能要考虑在 onCreate 期间这样做。 这有意义吗?

编辑:所以...我刚刚了解到向上导航(操作栏上的“<-”)不同于向后导航(硬按钮)。 您可以使用不同的方法解决此问题:

  • Make your activity "singleTop"
  • Intercept "navigation up" and turn it into "navigation back"

您应该获取 Activity 上下文,而不是从 View 获取上下文。试试这个:

Intent intent = new Intent(v.getContext(), Activity_2.class);
                    intent.putExtra("title",title.getText());
                    v.getContext().startActivity(intent);

那个:

Intent intent = new Intent(this, Activity_2.class);
                    intent.putExtra("title",title.getText());
                    this.startActivity(intent);

实际上,当你在 activity 时,你也可以 startActivity(intent);