【发布时间】:2025-12-25 13:30:16
【问题描述】:
我从我的应用程序的一些用户那里收到一个错误,当从我的 MainActivity 中单击 listItem 时,他们会将他们带到 DetailActivity(这是所需的结果),但如果他们按下返回或向上,他们会看到 MainActivity一切都重复了(listView,menuItems)。有人建议可能因为内存而导致活动被终止,所以我在手机上进入开发人员选项并打开“不保留活动”。这使我能够复制问题。现在我必须弄清楚为什么一切都重复了,但我有点不知道该往哪个方向走。这不像我在 onResume() 中创建菜单和布局。我在 onCreate() 中做所有事情。有人对从未保留的活动中优雅地恢复有任何建议吗?
编辑 1:
回应@Tomer Mor 的评论
我一共有三项活动。 A -> B-> C
在这种情况下,MainActivity 是 B,DetailActivity 是 C。我的活动 A 是一个“LoginActivity”,在我成功“登录”后完成()。
编辑 2:
如果有帮助,我的 MainActivity 是 FragmentActivity。
编辑 3:
回应@Doctoror Drive。我的 MainActivity 扩展了 FragmentActivity。 MainActivity 添加 MyFragment.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setUpActionBar();
Toast.makeText(this, this.getClass().getSimpleName(), 1).show();
setContentView(R.layout.my_placement);
myFragment = new MyFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.fragment_container, myFragment);
fragmentTransaction.commit();
}
我在 MainActivity extends FragmentActivity 的 onCreate 中放了一个日志,它被称为 ONCE。 我在 onCreateOptionsMenu() 的 MyFragment.java 中放了一个 Log.d(),它显示 TWICE! 所以它被调用了两次,但我不确定它是否只被创建一次。
编辑 4:
03-24 14:17:37.038: E/MainActivity(26486): onCreate hit!
03-24 14:17:37.048: D/SherlockFragmentActivity(26486): [supportInvalidateOptionsMenu]
03-24 14:17:37.048: D/SherlockFragmentActivity(26486): [invalidateOptionsMenu]
03-24 14:17:37.048: D/ActionBarSherlock(26486): [dispatchInvalidateOptionsMenu]
03-24 14:17:37.048: E/MyFragment(26486): onActivityCreated!
03-24 14:17:37.048: D/SherlockFragmentActivity(26486): [supportInvalidateOptionsMenu]
03-24 14:17:37.048: D/SherlockFragmentActivity(26486): [invalidateOptionsMenu]
03-24 14:17:37.048: D/ActionBarSherlock(26486): [dispatchInvalidateOptionsMenu]
03-24 14:17:37.048: E/MyFragment(26486): onActivityCreated!
编辑 5:
@Override
public void onActivityCreated(Bundle savedInstanceState) {
savedInstanceState=null;
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
adapter = AnimalList.getAnimalAdapter();
setListAdapter(adapter);
}
【问题讨论】:
-
签入manifast MainActivity launchMode 参数
-
这是你的片段被复制了,不是吗?发布您的 Activity 的 onCreate()。
-
Don't start a new question onActivityCreated()是Fragment的一个方法。你有两个片段,所以它被调用了两次。看我的回答。
标签: java android android-layout android-listview android-activity