在处理多个活动时使用意图数据
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);
我有几个链接在一起的活动。有: 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);