首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从碎片中打开碎片

从碎片中打开碎片
EN

Stack Overflow用户
提问于 2022-08-31 14:39:54
回答 1查看 45关注 0票数 -1

所以我有一个ListView片段(A)。如果单击Listview的项,则需要打开另一个片段(B)。我唯一的问题是,当我打开B片段时,布局中也会出现A。

代码语言:javascript
复制
FragmentA nextFrag = new FragmentA(data);
getFragmentManager().beginTransaction()
    .replace(R.id.fragment_a_layout, nextFrag)
    .commit();

打开一个新片段的正确方法是什么,而不显示之前的片段呢?

@sweak使我理解,我需要一个接口,我已经在我的FragmentA类中编写了这个接口:

代码语言:javascript
复制
public interface FragmentListener {
    void replaceFragments();
}

然后,如果我是对的,我就在我的MainActivity.class中实现这个接口。

代码语言:javascript
复制
@Override
public void replaceFragments() {
    FragmentB nextFrag = new FragmentB();
            getSupportFragmentManager().beginTransaction()
        .replace(R.id.fragment_layout, nextFrag)
        .commit();
}

在我的FragmantA onClickListener中,我调用了以下方法:(FragmentListener侦听器)

代码语言:javascript
复制
 listener.replaceFragments(recipeForFragment);

但是现在我的问题是我的侦听器是空的,所以我需要初始化,但是我不知道怎么做。也许我在FragmentA中为它创建了一个设置器:

代码语言:javascript
复制
public void setFragmentListener(FragmentListener fragmentListener) {
    this.listener = fragmentListener;
}

但我该在哪里叫这位策划人什么时候?

EN

回答 1

Stack Overflow用户

发布于 2022-09-01 09:14:44

现有的答案出奇地不正确。

如果您有androidx.fragment:fragment-ktx:x.x.x (不记得最新版本),您可以这样做:

代码语言:javascript
复制
supportFragmentManager.commit {
    replace(R.id.fragment_a_layout, nextFrag, "Some Tag If You need")
    addToBackStack(null) // optional
}

甚至

代码语言:javascript
复制
supportFragmentManager.commit {
    replace(R.id.fragment_a_layout, YourFragment::class.java)
}

这样,您甚至不需要那些愚蠢的YourFragment.newInstance()方法,因为第三个(可选的)参数是args的一个Bundle

我肯定有一个Java等价物。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73557642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档