从 Fragment (support.v4) 中获取 FragmentManager [重复]

Posted

技术标签:

【中文标题】从 Fragment (support.v4) 中获取 FragmentManager [重复]【英文标题】:get the FragmentManager from within a Fragment (support.v4) [duplicate] 【发布时间】:2018-08-22 07:22:38 【问题描述】:

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

import android.support.v4.app.FragmentManager;

我使用片段而不是活动来进行导航。在我的 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 中也有用于导航的按钮,但是不能从 Fragment 中调用 getSupportFragmentManager() 方法。

片段一:

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;
    

【问题讨论】:

试试 getActivity().getSupp... 我试过了,连同getContext().getSupp... 我得到一个无法解决方法错误。 【参考方案1】:

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

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

【讨论】:

使用getFragmentManager() 我得到以下错误:不兼容的类型。必需:android.support.v4.app.FragmentManager 找到:android.app.FragmentManager 您仍然必须在活动中使用getSupportFragmentManager()。它在您使用getFragmentManager 的片段中。您的错误消息没有出现在 cmets 中 - 尝试将其添加到您的问题中。 我按 Enter 进入下一行,忘记按住 shift。我已经用错误消息编辑了以前的评论。 这就是您在 Activity 中尝试使用 getFragmentManager() 时遇到的错误。这不是你想要使用的。 听起来你在尝试使用getActivity().getFragmentManager()?它只是片段中的getFragmentManager()

以上是关于从 Fragment (support.v4) 中获取 FragmentManager [重复]的主要内容,如果未能解决你的问题,请参考以下文章

cannot be cast to android.support.v4.app.Fragment

为啥此错误显示“不兼容的类型”。 “必需:android.support.v4.app.Fragment”?

我的片段无法转换为 android.support.v4.app.Fragment

ActionBarSherlock - android.support.v4.app.Fragment 类型无法解析。它是从所需的 .class 文件中间接引用的

Android Studio 和 android.support.v4.app.Fragment:无法解析符号

typeanumber 中的错误 - 无法解析 android.support.v4.app.fragment