我有一个碎片化的布局问题,如果之前已经回答过,我真诚地道歉,我太笨了,找不到它。我搜索了好几个小时却一无所获(好吧,我得到了很多但没有解决我的问题)。
所以这是我的设置:我有一个两个窗格布局,使用两个 FrameLayouts 作为我的片段的容器。活动列表.xml:
<FrameLayout android:id="@+id/listing" />
<FrameLayout android:id="@+id/details" />
打开应用程序时(片段活动中的 onCreate),使用 FragmentTransaction 以编程方式将名为 Listing 的片段添加到 FrameLayout“列表”中。
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" />
但是以后不会以编程方式替换或删除它。我只能 add() 然后旧的通过新的可见。但这不是这里的问题 - 只是对我的方式的解释。
到目前为止,所有这些都正常工作,创建和显示列表等,所以那里没有问题。但:
当ListingFragment在启动时显示并且我按下返回键时,在最后一个位置FrameLayout“列表”被清空而不是回到主屏幕!我认为这一定是因为我的 ListingActivity 的 onCreate 我显示了一个空框架并向其添加()一个 ListingFragment。所以后栈中也有空帧。对?
我尝试通过这个来解决ListingActivity的情况:
@Override
public void onBackPressed() {
super.onBackPressed();
if(getSupportFragmentManager().getBackStackEntryCount() == 0) {
this.finish();
}
}
但不知何故,这看起来或感觉不对……它看起来像是一个糟糕的解决方法。
那么有什么方法可以在带有空 FrameLayout 的视图膨胀之前插入片段,因此没有空状态可以“返回”到?或者是否可以从后台堆栈中删除“空”状态,即使它不在其中?关于如何在点击“后退”后避免空框的任何其他想法?
非常感谢您提前付出的努力!