小编Bob*_*les的帖子

以编程方式添加Fragment的返回键导致空容器

我有一个分散布局的问题,如果之前已经回答过,我真诚地道歉,而且我太傻了,无法找到它.我搜索了几个小时,什么都没有(好吧,我有很多,但没有解决我的问题).

所以这是我的设置:我有一个两个窗格布局,使用两个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被充气,所以没有空状态"回"到?或者是否可以从后堆栈中删除"空"状态,即使它不在后面?关于如何在击退"后退"后避免空框架的任何其他想法?

非常感谢你提前做出的努力!

android fragment fragmenttransaction

9
推荐指数
1
解决办法
2605
查看次数

标签 统计

android ×1

fragment ×1

fragmenttransaction ×1