我正在开发一个使用片段的应用程序,上周我的测试设备进行了lolipop更新。当我在lolipop设备上测试我的应用程序时,我看到Fragment Transaction的替换方法无法正常工作。
虽然在Kitkat版本上一切都很好,但它在Lolipop版本中令人困惑。
为了解释我的情况,我添加了一些图片。
- First Screen ---------------------------- KitKat -------------- -----------------------棒棒糖-------------
正如您所看到的,当我使用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版本)结果是一样的。没有变化。
感谢。
答案 0 :(得分:0)
可能的问题可能是代码:
if (mFragmentFeedBack.isVisible())
我不建议使用此方法来检查可见性。根据文档@ Fragment isVisible(),它说
...这意味着:(1)已添加,(2)将其视图附加到 窗口,(3)没有隐藏。
这部分句子不是很清楚。我怀疑KitKat说它不可见但Lollipop说它是,并且我同意Lollipop的实施。 KitKat说添加了片段(是),视图附加(是),隐藏(不是真的!)。 这实际上是其他GUI库的GUI问题,信不信由你!
可能的解决方案,目前: