【问题标题】:Hide / Show fragment with fragmentTransaction not working使用 fragmentTransaction 隐藏/显示片段不起作用
【发布时间】:2014-06-06 19:16:25
【问题描述】:

我希望我的活动包含 2 个片段,并使用操作栏上的按钮在它们之间切换。所以这是我的活动布局:

<?xml version="1.0" encoding="utf-8"?>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:orientation="vertical">

        <FrameLayout
            android:id="@+id/fragment_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

</LinearLayout>

在活动的 onCreate() 中,我将两个片段都添加到容器中......因为我需要在 secondFragment 之前执行 firstFragment,所以我首先添加它,而不是隐藏 secondFragment,以便用户以正确的顺序看到片段:

if (findViewById(R.id.fragment_container) != null) {
        if (savedInstanceState != null) {
            return;
        }
        FirstFragment firstFragment = new FirstFragment();
        SecondFragment secondFragment = new SecondFragment();
        firstFragment.setArguments(getIntent().getExtras());
        getSupportFragmentManager().beginTransaction()
                .add(R.id.fragment_container, firstFragment, "FirstFragment")
                .add(R.id.fragment_container, secondFragment, "SecondFragment")
                .hide(secondFragment)
                .commit();
    }

当用户触摸操作栏上的按钮时,会执行以下方法,并且应该隐藏一个片段并显示另一个片段,但没有任何反应...

public void changeFragment(int id){
    Fragment secondFragment = new SecondFragment();
    Fragment firstFragment = new FirstFragment();
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction()
            .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);
    switch (id){
        case 1:
            //show 2nd
            transaction.hide(firstFragment)
                    .show(secondFragment)
                    .commit();
            break;
        case 2:
            //show 1st
            transaction.hide(secondFragment)
                    .show(firstFragment)
                    .commit();
            break;
        default:
            //do nothing
    }
}

关于我在这里缺少什么的任何提示?提前致谢

【问题讨论】:

    标签: android android-fragments fragmenttransaction


    【解决方案1】:

    实际上,您的问题看起来微不足道。 每次您通过以下方式创建新片段时:

    public void changeFragment(int id){
        Fragment secondFragment = new SecondFragment();
        Fragment firstFragment = new FirstFragment();
    

    我认为代码应该是这样的,因为您只想隐藏一个并显示另一个,而不是添加两个绝对新的片段:

    public void changeFragment(boolean id){
        final Fragment secondFragment = getFragmentManager().findFragmentByTag(FIRST_FRAGMENT_TAG);
        final Fragment firstFragment = getFragmentManager().findFragmentByTag(SECOND_FRAGMENT_TAG);
    

    【讨论】:

      猜你喜欢
      • 2017-08-05
      • 1970-01-01
      • 2019-02-23
      • 2015-03-10
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多