在单个 Activity 上处理多个 Intent
Posted
技术标签:
【中文标题】在单个 Activity 上处理多个 Intent【英文标题】:Handle multiple Intents on single Activity 【发布时间】:2017-03-16 23:53:06 【问题描述】:我有三项活动。在Activity
一(导航菜单)上,我有一个简单的ClickListener
来启动Activity
二。
Intent intent3 = new Intent(this, SettingsActivity.class);
intent3.putExtra("from", "BaseActivity");
startActivity(intent3);
finish();
break;
在Actvity
三我有一些我需要在Activity
二上的数据。所以我将数据放在Bundle
中,如下所示:
//send Data to Setting Activity
Intent mIntent = new Intent(StartActivity.this, SettingsActivity.class);
Bundle mBundle = new Bundle();
mBundle.putString("from", "SettingsActivity");
mBundle.putSerializable("spinnerHashTagItems", (Serializable) spinner_HashTagItem);
mBundle.putSerializable("spinnerUserItem", (Serializable) spinner_UserItem);
mBundle.putBoolean("isCheckedHashTag", isCheckedHashTag);
mBundle.putBoolean("isCheckedHashTagUser", isCheckedHashTagUser);
mBundle.putBoolean("isCheckedAllFromUser", isCheckedAllFromUser);
mIntent.putExtras(mBundle);
所以如果我启动Activity
两个,我只能从第一个Activity
获得Intent
,而不是从第三个获得:
//get loadet Settings from StartActivity
Bundle bundle = getIntent().getExtras();
if (bundle != null)
//do nothing
Bundle bundle1 = getIntent().getExtras();
spinner_HashTagItems.clear();
spinner_HashTagItems = (List<String>) bundle1.getSerializable("spinner_HashTagItem");
spinner_userItems.clear();
spinner_userItems = (List<String>) bundle1.getSerializable("spinner_userItem");
chbox_hashTag.setChecked(bundle1.getBoolean("chbox_hashTag"));
chbox_hashTagUser.setChecked(bundle1.getBoolean("chbox_hashTagUser"));
chbox_allFromUser.setChecked(bundle1.getBoolean("chbox_allFromUser"));
我使用调试器通过Activity
二并从Activity
一中获取Bundle
。如何从Activity
三获得Bundle
?
【问题讨论】:
你的startActivity(mIntent);
在哪里?
我不想启动 Activity。我只需要数据。活动一是 StartActivity,它在开始时加载设置并将数据提供给 SettingActvity(活动二)。我不想在应用程序启动时启动设置。
您有一些数据要从活动一通过活动二发送到活动三,对吧?
你应该调用 startActivity 将数据从 Activit 发送到另一个活动。
不,我想将我的数据从活动一发送到活动二,但我从活动三获得数据。
【参考方案1】:
使用startActivityForResult (Intent intent, int requestCode)
从StartActivity
开始您的SettingsActivity
。
处理StartActivity
中的结果:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
if (requestCode == REQUEST_CODE_YOU_USED_TO_START_SETTINGS_ACTIVITY)
if (resultCode == RESULT_OK)
//read the data from the Intent and prepare the Bundle for Activity Two
【讨论】:
以上是关于在单个 Activity 上处理多个 Intent的主要内容,如果未能解决你的问题,请参考以下文章
Android 10 - 找不到处理 Intent 的 Activity
11) 十分钟学会android--Intent消息处理与传递详解