如何从已从片段启动的活动中获取片段实例?

时间:2015-11-05 10:44:08

标签: android fragment dagger-2

我有一个具有不同堆栈片段的Activity。一个包含项目列表的片段启动详细活动。在此活动中,我需要片段实例在创建活动时执行某些操作(与dagger 2相关)。

我尝试过findFragmentById和findFragmentByTag方法但返回null。

我的活动中有这段代码:

protected void initDI() {
    ContactsFragment contactsFragment = (ContactsFragment) getSupportFragmentManager().findFragmentById(fragmentId);
    ContactsFragmentComponent fragmentComponent = contactsFragment.getFragmentComponent();
    DetailContactActivityComponent subcomponent = fragmentComponent.createSubcomponent(new DetailContactActivityModule());
    subcomponent.injectDetailContactActivity(this);
}

如何在活动中获取片段的实例?

编辑:

问题是,当我启动一个新活动并获得getFragmentManager实例时,此实例与启动活动的片段的fragmentManager不同。

1 个答案:

答案 0 :(得分:0)

如果您无法通过这种方式找到它们,那么请尝试查看所有背堆片段:

    boolean foundMyFragment = false;
        String fragmentBackstackTag = "";
        FragmentManager fm = getSupportFragmentManager();
        for(int entry = 0; entry < fm.getBackStackEntryCount(); entry++){
            fragmentBackstackTag = fm.getBackStackEntryAt(entry).getName();
            Log.i(TAG, "Found fragment: " + fragmentBackstackTag);

            // check if null, because sometimes fragmentBackstacktag is null
            if (fragmentBackstackTag != null) {
                if (fragmentBackstackTag.equals("fragmentTagYouAreSearching")) {
                    foundMyFragment = true;
                    // get fragment from backstack
                }
            }
        }