Android 片段可见时的侦听器

Android 片段可见时的侦听器,android,android-fragments,actionbarsherlock,Android,Android Fragments,Actionbarsherlock,我疯狂地想得到一个选项菜单,让不同的视图有不同的选项。如果对我的片段调用onResume(),我可以让它工作,但事实并非如此 我有一个SherlockFragmentActivity,它在onCreate期间添加了一个SherlockFragment,如下所示: if (getSupportFragmentManager().findFragmentById(android.R.id.content) == null) { Fragment f = LoginFragme

我疯狂地想得到一个选项菜单,让不同的视图有不同的选项。如果对我的片段调用onResume(),我可以让它工作,但事实并非如此

我有一个SherlockFragmentActivity,它在onCreate期间添加了一个SherlockFragment,如下所示:

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