本文介绍了片段的交易取代API-21被留下来的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我开发使用片段的应用程序,我上周的测试装置把棒棒糖更新。当我测试一个棒棒糖设备上的应用程序,我看到碎片事务的替代方法没有正常工作。

I am developing an app that uses fragments, last week my test device took lolipop update. When I test my app on a lolipop device, I saw that Fragment Transaction's replace method didn't work properly.

这与在混淆的版本棒棒糖工作虽然一切在奇巧版本的罚款。

It work with confusingly in Lolipop version although everything fine on Kitkat version.

为了说明我的情况,我已经添加了一些图片。

In order to explain my situation, I've added some images.

- 第一Screen----------------------------KitKat-------------------------------------Lollipop-------------

--First Screen----------------------------KitKat-------------------------------------Lollipop-------------



正如你所看到的,当我使用奇巧,一切都很好,但只要我使用棒棒糖片段交易更换工作容易混淆。

As you can see, when i use kitkat, everything fine but as soon as i use lolipop fragment transaction replace is working confusingly.

下面是我的按钮code;

Here is my button code;

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 version is running on a tablet, but I tried my app on the phone (Kitkat version) result is the same. No changes.

感谢。

推荐答案

可能的问题可能是code:

The possible issue may be the code:

if (mFragmentFeedBack.isVisible())

我不建议使用检查可见此方法。据资料@ ,它说

...这意味着:(1)已被添加,(2)有其视图附着到
  窗口中,及(3)不隐藏

这句话的这部分还不是很清楚。我怀疑奇巧说,这是不可见的,但棒棒堂说,这就是我的棒棒糖实施同意。奇巧说,被添加的片段(是),视图附后(是),隐藏(不是真的!)。
这实际上是一个GUI的问题与其他GUI库,信不信由你!

This part of the sentence is not very clear. I suspect KitKat says it is NOT visible but Lollipop says it is, and I agree with Lollipop implementation. KitKat says the Fragment is added (yes), the view is attached (yes), hidden (not really!).This is actually a GUI issue with other GUI libraries, believe it or not!

可能的解决方案,现在:


  1. 创建一个布尔标志,并保持2片段之间的标志。如果这是简单的事情,这是最好的。

  2. 检查一个按钮或看法是可以点击的,不知道是哪一个。这比检查可见性()更坚实。

  3. 我觉得code设计是一个比较复杂的比它应该是。现在,这是我的建议。当用户点击新建按钮,只需调用replace()方法,不要使用隐藏/显示方法。当用户点击反馈片段SEND键,或者调用popBackStack()或更换()方法。怎么样?

这篇关于片段的交易取代API-21被留下来的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-04 22:32