gpt4 book ai didi

android - 以编程方式添加的 Fragment 上的后退键会导致空容器

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:44 24 4
gpt4 key购买 nike

我有一个零散的布局问题,如果之前有人回答过,我真诚地道歉,我太笨了,找不到它。我搜索了几个小时但一无所获(好吧,我搜索了很多但没有解决我的问题)。

这是我的设置:我有两个 Pane 布局,使用两个 FrameLayout 作为我的 fragment 的容器。 Activity 列表.xml:

<FrameLayout android:id="@+id/listing" />
<FrameLayout android:id="@+id/details" />

打开应用程序时( fragment Activity 中的 onCreate),使用 FragmentTransaction 以编程方式将名为 Listing 的 fragment 添加到 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 的 View 膨胀之前插入 fragment ,这样就没有空状态可以“返回”到?或者是否可以从返回堆栈中删除“空”状态,即使它不在其中?关于如何在点击“返回”后避免空框的任何其他想法?

非常感谢您提前付出的努力!

最佳答案

在onCreate 中添加Fragment 时不要调用ft.addToBackStack(null)。这告诉 FragmentManger 在该 fragment 之前您有另一个状态,您希望能够跳回到该状态。

关于android - 以编程方式添加的 Fragment 上的后退键会导致空容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12919433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com