从 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 文件中间接引用的