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