如何用 ViewPager 中的另一个片段替换 Android 片段?

Posted

技术标签:

【中文标题】如何用 ViewPager 中的另一个片段替换 Android 片段?【英文标题】:How to replace an Android fragment with another fragment inside a ViewPager? 【发布时间】:2015-09-29 22:22:56 【问题描述】:

我有一个由 4 个选项卡组成的视图寻呼机。每个选项卡都有自己的片段。

如何使用片段事务将选项卡 3 中的片段替换为新片段?

我已经尝试了很多东西,但我根本无法提出解决方案。我试过在google和***上四处寻找,但没有成功。

【问题讨论】:

也就是说,你想改变 ViewPager 的自定义事务效果。我对吗?对不起,我无法完全理解这个问题。 您想何时更改片段?一边滚动一边查看片段? @DorukhanArslan,你能用通俗的话说吗? @tibo,在查看选项卡时,按下了一个按钮。该按钮调用由 Activity 实现的 onFragmentInteraction 函数。在活动中,我希望发生替换 您应该发布您尝试过的内容或链接 【参考方案1】:

我假设您的片段有一个放在中心的按钮。通过单击它,您可以更改此按钮下的布局。您提到的第一个片段的内容/布局应替换为 wrapperA,第二个片段的内容/布局应替换为 wrapperB。我为 wrapperA 放了一个简单的红色背景,以便与 wrapperB 区分开来,由于同样的原因,wrapperB 也是绿色的。我希望这是你想要的:

public class SwitchingFragment extends Fragment 

    Button switchFragsButton;
    RelativeLayout wrapperA, wrapperB;
    View rootView;

    @Override
    public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) 
        rootView = inflater.inflate(R.layout.layout_switch, container, false);
        wrapperA = (RelativeLayout) rootView.findViewById(R.id.wrapperA);
        wrapperB = (RelativeLayout) rootView.findViewById(R.id.wrapperB);

        switchFragsButton = (Button) rootView.findViewById(R.id.switchFragsButton);
        switchFragsButton.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View arg0) 
                if (wrapperB.getVisibility() == View.GONE) 
                    wrapperB.setVisibility(View.VISIBLE);
                    // There is no need to change visibility of wrapperA since it stays behind when wrapperB is visible.
                    // wrapperA.setVisibility(View.GONE);
                
                else 
                    wrapperB.setVisibility(View.GONE);
                    // Again, there is no need.
                    // wrapperA.setVisibility(View.VISIBLE);
                
            
        );

        return rootView;
    

布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:layout_gravity="center"
    android:orientation="vertical">

    <!-- The content of first fragment should be in "wrapperA". -->
    <RelativeLayout
        android:id="@+id/wrapperA"
        android:layout_
        android:layout_
        android:background="@color/red"
        android:visibility="visible">

    </RelativeLayout>

    <!-- The content of second fragment should be in "wrapperB". -->
    <RelativeLayout
        android:id="@+id/wrapperB"
        android:layout_
        android:layout_
        android:background="@color/green"
        android:visibility="gone">

    </RelativeLayout>

    <!-- As I said, I assume that the layout switcher button is stable
         and so it should be in front of the switching layouts. -->
    <Button
        android:id="@+id/switchFragsButton"
        android:layout_
        android:layout_
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:background="@color/black"
        android:text="Switch"
        android:textSize="20sp"
        android:textStyle="bold"
        android:textColor="@color/white"/>

</RelativeLayout>

或者,您可以尝试通过通知您的 FragmentPagerAdapter 来直接更改片段,如此链接中所述: Replace fragment with another fragment inside ViewPager

【讨论】:

以上是关于如何用 ViewPager 中的另一个片段替换 Android 片段?的主要内容,如果未能解决你的问题,请参考以下文章

无法从 ViewPager 中的另一个片段刷新/更新片段中的列表视图

如何用熊猫列中的另一个字符串替换子字符串[关闭]

如何用另一个表中的另一列替换一列数据?

编辑时如何用导航控制器中的另一个 UIBarButtonItem 替换后退按钮?

如何用另一个上下文中的另一个对象替换某个上下文中的对象?

替换 Viewpager 中的片段 [重复]