【问题标题】:get the FragmentManager from within a Fragment (support.v4) [duplicate]从 Fragment (support.v4) 中获取 FragmentManager [重复]
【发布时间】: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... 我得到一个无法解决方法错误。

标签: java android android-fragments


【解决方案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()
猜你喜欢
  • 1970-01-01
  • 2020-02-06
  • 2021-04-09
  • 1970-01-01
  • 1970-01-01
  • 2014-08-15
  • 1970-01-01
  • 2014-03-01
  • 1970-01-01
相关资源
最近更新 更多