2

我要疯狂地尝试让 optionsMenu 为不同的视图提供不同的选项。如果在我的片段上调用 ​​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();
        }

这最终使用相同的方法在其上添加了另一个 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 logs when they are created, but when I pressBack from any of them, I don't get theonResume` 日志。我的选择之一是注销,它会关闭所有这样的视图:

FragmentManager fm = getSupportFragmentManager();

        if (fm.getBackStackEntryCount() > 0) {
            fm.popBackStack(fm.getBackStackEntryAt(0).getName(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
        }

但我什至没有在第一个片段上获得 onResume 。

由于另一个问题,我在这里的片段是透明的(这可能是正常行为,我不确定)。我想知道我添加片段的方式是否错误?

如果不是,还有什么问题?

4

1 回答 1

-1

正如 JonasSeputis 和 OP 本人所指出的,解决方案是transaction.add()transaction.replace()

详细的解决方案在这里。

于 2019-03-25T15:22:22.507 回答