片段在API-21上的交易替代是落后的

时间:2015-06-09 11:46:44

标签: android android-fragments fragmenttransaction

我正在开发一个使用片段的应用程序,上周我的测试设备进行了lolipop更新。当我在lolipop设备上测试我的应用程序时,我看到Fragment Transaction的替换方法无法正常工作。

虽然在Kitkat版本上一切都很好,但它在Lolipop版本中令人困惑。

为了解释我的情况,我添加了一些图片。

- First Screen ---------------------------- KitKat -------------- -----------------------棒棒糖-------------

enter image description here enter image description here enter image description here

正如您所看到的,当我使用kitkat时,一切正常,但只要我使用lolipop片段事务替换就会令人困惑。

这是我的按钮代码;

mButtonOk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                FeedbackFragment mFragmentFeedBack = new FeedbackFragment();
                android.app.FragmentManager fm = getFragmentManager();
                fm.executePendingTransactions();
                android.app.FragmentTransaction fragmentTransaction = fm.beginTransaction();
                if (mFragmentFeedBack.isVisible()) {
                    fragmentTransaction.hide(mFragmentFeedBack);
                } else {

                    if (!mFragmentFeedBack.isAdded()) {
                        fragmentTransaction.replace(R.id.containerfragment, mFragmentFeedBack);
                    }


                    fragmentTransaction.show(mFragmentFeedBack);
                }
                fragmentTransaction.addToBackStack(null);
                fragmentTransaction.commit();

            }
        });

这是我的xml;

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" tools:context=".MainActivity">


<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="New Button"
    android:id="@+id/button"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="117dp" />

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

</FrameLayout>

编辑: Kitkat版本正在平板电脑上运行,但我在手机上尝试了我的应用程序(Kitkat版本)结果是一样的。没有变化。

感谢。

1 个答案:

答案 0 :(得分:0)

可能的问题可能是代码:

if (mFragmentFeedBack.isVisible())

我不建议使用此方法来检查可见性。根据文档@ Fragment isVisible(),它说

  

...这意味着:(1)已添加,(2)将其视图附加到   窗口,(3)没有隐藏。

这部分句子不是很清楚。我怀疑KitKat说它不可见但Lollipop说它是,并且我同意Lollipop的实施。 KitKat说添加了片段(是),视图附加(是),隐藏(不是真的!)。 这实际上是其他GUI库的GUI问题,信不信由你!

可能的解决方案,目前:

  1. 创建一个布尔标志,并保持两个片段之间的标志。如果这很简单,那就最好了。
  2. 检查按钮或视图是否可点击,不知道哪一个。这比检查isVisible()更加可靠。
  3. 我认为代码设计比它应该复杂一点。现在,这是我的建议。当用户点击“New Button”时,只需调用replace()方法,不要使用hide / show方法。当用户点击反馈片段中的SEND按钮时,可以调用popBackStack()或replace()方法。怎么样?