【发布时间】:2014-09-21 18:08:32
【问题描述】:
在我的应用程序中,我为项目列表建模。在 MainActivity 中,我看到 ListView 包含列表。我可以单击每个列表以查看其项目 (DisplayListActivity)。在 DisplayListActivity 上,我在 ActionBar 中有按钮来显示列表属性。这将启动第三个活动 (EditListPropertiesActivity)。
Main
| ^
V |
DisplayListActivity (listId is passed with Intent, default=1)
| ^
V |
EditListPropertiesActivity (listId is passed with Intent, default=1)
出现问题,当我在 MainActivity 上选择 List id=2,然后我在 DisplayListActivity 上选择属性按钮。完成 EditListPropertiesActivity 后,我单击 ActionBar 上的“
我返回到 DisplayListActivity,但没有返回到列表 id=2,而是看到了 id=1 的列表(这是默认值)。
如何将 ListId 从 EditListPropertiesActivity 传回给 DisplayListActivity?
- startActivityForResult 并返回 id - 可以,但我觉得很难看
- 使用 SharedPreferences 并存储类似 lastVisitedList 的东西 - 丑陋
- 将 lastVisitedList 信息存储在 db 中 - 甚至更丑
该问题的通常解决方案是什么?
下面的代码 sn-ps。
MainActivity
public class MainActivity extends Activity {
...
listView.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
MetaList mlist = (MetaList) listView.getItemAtPosition(i);
final Intent intent;
intent = new Intent(getApplicationContext(), DisplayListActivity.class);
intent.putExtra(META_LIST_SELECTED, mlist.getId());
startActivity(intent);
}
}
);
...
DisplayListActivity
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.single_list);
intent = getIntent();
metaListId = intent.getLongExtra(MainActivity.META_LIST_SELECTED, 1); //read the data or take 1 as default
...
//start the third activity
final Intent intent;
intent = new Intent(getApplicationContext(), EditListPropertiesActivity.class);
intent.putExtra(META_LIST_SELECTED, metaListId);
startActivity(intent);
....
EditListPropertiesActivity
public class EditListPropertiesActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edit_list_parameters);
getActionBar().setDisplayHomeAsUpEnabled(true); //this enables the '<' (back) button
intent = getIntent();
metaListId = intent.getLongExtra(DisplayMetaListActivity.META_LIST_SELECTED, 1);
...
清单
<application>
<activity
android:name=".MainActivity">
</activity>
<activity
android:name="com.example.tutorial1.DisplayListActivity"
android:parentActivityName="com.example.tutorial1.MainActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.tutorial1.MainActivity" />
</activity>
<activity
android:name="com.example.tutorial1.EditListPropertiesActivity"
android:parentActivityName="com.example.tutorial1.DisplayListActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.tutorial1.DisplayListActivity" />
</activity>
</application>
【问题讨论】:
标签: java android android-intent android-activity android-actionbar