从片段中获取FragmentManager(support.v4)

时间:2018-03-13 21:41:44

标签: java android android-fragments

请注意,我正在使用android.support.v4.app.FragmentManager。我在互联网上搜索过,我发现了许多类似的问题,但它们都是指android.app.FragmentManager,并且没有一个解决方案可以使用support.v4 FragmentManager。

import android.support.v4.app.FragmentManager;

我正在使用Fragments而不是Activities来进行导航。在我的MainActivity中,我有一个NavigationDrawer,用于选择要使用以下方法显示的片段:

public boolean onNavigationSelected(MenuItem item) {

    FragmentManager fragManager = getSupportFragmentManager();

    if(item.getItemId() == R.id.fragment_one) {
        fragManager.beginTransaction().replace(R.id.content, new FragmentOne()).commit()
    }
    if(item.getItemId() == R.id.fragment_two) {
        fragManager.beginTransaction().replace(R.id.content, new FragmentTwo()).commit()
    }

}

当用户使用NavigationDrawer导航时,此方法正常,但Fragment中也有用于导航的按钮,但无法从片段中调用getSupportFragmentManager()方法。

FragmentOne:

public class FragmentOne extends Fragment {

    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {

        // Inflate the layout for the Fragment
        fragment = inflater.inflate(R.layout.fragment_one_layout, container, false);

        // Do some stuff to the fragment before returning it

        Button button = (Button) findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                // This does not work
------------>   FragmentManager fragManager = getSupportFragmentManager();
                fragManager.beginTransaction().replace(R.id.content, new FragmentTwo()).commit();
            }
        });

        return fragment;
    }
}

1 个答案:

答案 0 :(得分:1)

活动' getSupportFragmentManager()是片段getFragmentManager()

将Activity的方法命名为getSupportFragmentManager()的唯一原因是避免与框架getFragmentManager()方法冲突。 Fragment类中没有这样的要求。