我有一个关于碎片布局的问题,如果之前已经回答过并且我太傻不能找到它,那我真诚地道歉。我搜索了几个小时,什么都没找到(好吧,我找到了很多,但是没有解决我的问题)。
这是我的设置:我使用两个FrameLayout作为碎片的容器来实现双窗格布局。activity_listing.xml:
<FrameLayout android:id="@+id/listing" />
<FrameLayout android:id="@+id/details" />
打开应用程序时(在片段的活动中的 onCreate 方法中),通过 FragmentTransaction 编程方式向 FrameLayout "listing" 添加名为 Listing 的片段。
public class ListingActivity extends FragmentActivity
implements ListingFragment.Callbacks {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listing);
// Displaying the first listing here ...
Fragment fragment = new ListingFragment();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.listing, fragment);
ft.addToBackStack(null);
ft.commit();
...
}
这个ListingFragment在运行时被替换了几次,所以我必须创建它而不是在XML中定义。我尝试过后者,使用了
<fragment android:name="com.example.app.ListingFragment" />
但是,如果不进行编程替换或删除,它将无法在以后程序化地被替换或删除。我只能添加(),然后旧的通过新的是可见的。但这不是问题所在 - 只是我方法的解释。
到目前为止,所有工作都按照预期进行,Listing已创建并显示等,因此没有问题。但是:
当启动ListingFragment并按下返回键时,在最后一个位置的FrameLayout“listing”被清空,而不是回到Homescreen!我想这是因为我在ListingActivity的onCreate中显示一个空框架并添加()了一个ListingFragment。因此,后退堆栈中也有一个空白框架。 对吗?
我尝试通过以下方法解决此情况:
@Override
public void onBackPressed() {
super.onBackPressed();
if(getSupportFragmentManager().getBackStackEntryCount() == 0) {
this.finish();
}
}
但是这样做看起来或感觉并不正确……它看起来像一个糟糕的解决方案。
那么有没有办法在填充空FrameLayout的视图之前插入片段,以便没有空状态可以“返回”?或者是否可能从回退堆栈中删除“空”状态,尽管它不在其中?还有其他避免点击“返回”后出现空框架的想法吗?
非常感谢您的努力!