【问题标题】:How to open another fragment from inside a ViewPager fragment?如何从 ViewPager 片段中打开另一个片段?
【发布时间】:2021-02-26 13:48:10
【问题描述】:

我按照本教程在滑动视图 (ViewPager) 中构建了一个包含三个片段的应用。

https://c1ctech.com/android-viewpager-example-to-create-sliding-screens/

应用已成功构建。然后我在 FragmentOne 中添加了一个按钮。并且还使用 fragment_four.xml 布局文件创建了另一个名为 FragmentFour 的片段。

现在我想通过 onClickListener 将 FragmentFour 与 FragmentOne 链接到我之前创建的按钮。在 FragmentOne 中,该按钮将被单击,它将启动 FragmentFour。为了实现这一点,我在 onClickListener 中添加了这些代码-

FragmentFour fragFour = new FragmentFour();
                    FragmentManager fragmentManager = getChildFragmentManager();
                    FragmentTransaction transaction = fragmentManager.beginTransaction();
                    transaction.replace(R.id.main_frameLayout, fragFour);
                    transaction.addToBackStack(null);
                    transaction.commit();

但在运行应用程序后,当我从 FragmentOne 内部单击该按钮时,FragmentFour 的布局与 FragmentOne 的布局重叠。而且 FragmentTwo 和 FragmentThree 可以通过从 FragmentFour 滑动访问,但我不想要这个。

如果这里有什么问题,请帮助我。

【问题讨论】:

    标签: android android-fragments android-viewpager


    【解决方案1】:

    您的代码将ViewPager 中的FragmentFour 替换为FragmentOne

    transaction.replace(R.id.fragment_one, fragFour);
    

    这会产生一个带有 FragmentFourFragmentTwoFragmentThree 的 ViewPager

    您似乎想为FragmentFour 开始一个新的Activity。从FragmentOne 中的onClick 处理程序开始一个新活动,如下所示:

    getActivity().startActivity(new Intent(context, FragmentFourActivity.class));
    

    FragmentFourActivity 是一个 Android Activity(例如AppCompatActivity),其布局包含 FragmentFour。如果不确定如何操作,请关注https://developer.android.com/training/basics/firstapp/starting-activity

    【讨论】:

    • 我不想开始另一个新活动。 FragmentFour.class 是一个扩展 Fragment 的片段。我只想在 FragmentOne 的按钮单击时启动此片段。
    • 我可以在单击按钮时启动该片段,但新片段会重叠在主片段上。
    • 您的问题和 cmets 让我不清楚您要完成什么......即点击按钮后你期望看到 FragmentFour 在哪里?您当前的代码已替换 ViewPager 中的 FragmentOne。
    【解决方案2】:

    现在问题已经解决了。我只需要对我的代码进行一些更改。在 onClickListener 中,我像这样更改了我的代码-

    之前:

    FragmentManager fragmentManager = getChildFragmentManager();
    

    之后:

    FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
    

    并且在 fragment_four.xml 文件的相对布局内:

    android:background="@color/bgcolor"
    android:clickable="true"
    android:focusable="true"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多