Android 片段可见时的侦听器
我疯狂地想得到一个选项菜单,让不同的视图有不同的选项。如果对我的片段调用onResume(),我可以让它工作,但事实并非如此 我有一个SherlockFragmentActivity,它在onCreate期间添加了一个SherlockFragment,如下所示:Android 片段可见时的侦听器,android,android-fragments,actionbarsherlock,Android,Android Fragments,Actionbarsherlock,我疯狂地想得到一个选项菜单,让不同的视图有不同的选项。如果对我的片段调用onResume(),我可以让它工作,但事实并非如此 我有一个SherlockFragmentActivity,它在onCreate期间添加了一个SherlockFragment,如下所示: if (getSupportFragmentManager().findFragmentById(android.R.id.content) == null) { Fragment f = LoginFragme
if (getSupportFragmentManager().findFragmentById(android.R.id.content) == null) {
Fragment f = LoginFragment.newInstance();
getSupportFragmentManager()
.beginTransaction()
.add(android.R.id.content, f, "loginfragment")
.attach(f)
.commit();
}
FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack(fm.getBackStackEntryAt(0).getName(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
这最终会使用相同的方法在上面添加另一个SherlockFragment:
Fragment f = OfferListFragment.newInstance();
getActivity().getSupportFragmentManager()
.beginTransaction()
.add(android.R.id.content, f, "offerList")
.addToBackStack(f.getClass().getSimpleName())
.commit();
最后,这将使用以下方法在顶部启动另一个SherlockFragment:
AddOfferFragment newFragment = AddOfferFragment.newInstance(offer);
getActivity()
.getSupportFragmentManager()
.beginTransaction()
.add(android.R.id.content, newFragment, "addofferdialog")
.addToBackStack(newFragment.getClass().getSimpleName())
.commit();
我添加了onResume()事件,如下所示:
@Override
public void onResume() {
Log.e(TAG, "onResume");
super.onResume();
}
现在,当创建日志时,我看到了onResume日志,但当我从任何一个日志中按Back时,我根本就看不到onResume`log's。我的选择之一是注销,这样会取消所有视图,如下所示:
if (getSupportFragmentManager().findFragmentById(android.R.id.content) == null) {
Fragment f = LoginFragment.newInstance();
getSupportFragmentManager()
.beginTransaction()
.add(android.R.id.content, f, "loginfragment")
.attach(f)
.commit();
}
FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack(fm.getBackStackEntryAt(0).getName(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
但我连第一个片段的简历都没有
由于片段透明的另一个问题(这可能是正常行为,我不确定)。
我想知道我添加碎片的方式是否错误
如果没有,还有什么问题?正如JonasSeputis和OP本人所指出的,解决方案是将事务。add()
更改为事务。replace()
正如JonasSeputis和OP本人所指出的,解决方案是将事务.add()
更改为事务.replace()
不确定这是否会改变您的情况,但(1)您不需要在碎片事务中同时调用add()
和attach()
。只要add()
就足够了。(2) 当你把另一个碎片“放在上面”时,你的意思是你正在试图用一个新的碎片替换现有的碎片吗?在这种情况下,您应该在FragmentTransaction
中使用replace()
而不是add()
。谢谢您的评论。我将在第1节结束。2,我全屏显示下一个片段,我保留原始片段,以便用户可以单击“上一步”返回到它们。这不是正确的方法吗?我刚才在关于透明度和使用的另一个问题上得到了相同的回答。替换而不是。添加修复了我所有的问题。ThanksI我遇到的问题与Darren onResume在片段可见时没有被调用的问题相同。对Darren问题的回答包括透明度和使用.replace代替.add不确定这是否会改变您的情况,但是(1)在碎片事务中,您不需要同时调用add()
和attach()
。只要add()
就足够了。(2) 当你把另一个碎片“放在上面”时,你的意思是你正在试图用一个新的碎片替换现有的碎片吗?在这种情况下,您应该在FragmentTransaction
中使用replace()
而不是add()
。谢谢您的评论。我将在第1节结束。2,我全屏显示下一个片段,我保留原始片段,以便用户可以单击“上一步”返回到它们。这不是正确的方法吗?我刚才在关于透明度和使用的另一个问题上得到了相同的回答。替换而不是。添加修复了我所有的问题。ThanksI我遇到的问题与Darren onResume在片段可见时没有被调用的问题相同。对达伦问题的回答包括透明度和使用.replace代替.add