gpt4 book ai didi

java - 使用 ActionBar 导航返回上一个 Activity

转载 作者:太空狗 更新时间:2023-10-29 14:12:26 26 4
gpt4 key购买 nike

在我的应用中,我对项目列表进行建模。在 MainActivity 中,我看到包含列表的 ListView。我可以单击每个列表以查看其项目 (DisplayListActivity)。在 DisplayListActivity 上,我在 ActionBar 中有按钮来显示列表属性。这将启动第三个 Activity (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 上的“<”(返回):enter image description here .

我返回到 DisplayListActivity,但我没有返回到列表 id=2,而是看到了 id=1(默认)的列表。

如何将 ListId 从 EditListPropertiesActivity 传回给 DisplayListActivity?

  1. startActivityForResult 并返回 id - 可以,但我觉得很难看
  2. 使用 SharedPreferences 并像 lastVisitedList 一样存储某物 - 丑陋
  3. 将 lastVisitedList 信息存储在数据库中——甚至更丑陋

该问题的通常解决方案是什么?

下面的代码 fragment 。

主 Activity

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);
}
}
);
...

显示列表 Activity

@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);
...

list

<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>

最佳答案

试试这个来完成一个 Activity

Intent intent = new Intent();
intent.putExtra(EXTRA, value);
setResult(RESULT_OK, output);
finish();

这是为了获得上一个 Activity 的结果

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);

if(data.getExtras().containsKey(EXTRA)){

// do stuff with data from finished activity

String bla = data.getStringExtra(EXTRA)

}
}

编辑:阅读评论!需要使用startActivityForResult

关于java - 使用 ActionBar 导航返回上一个 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25962311/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com