所以我有一个ListView片段(A)。如果单击Listview的项,则需要打开另一个片段(B)。我唯一的问题是,当我打开B片段时,布局中也会出现A。
FragmentA nextFrag = new FragmentA(data);
getFragmentManager().beginTransaction()
.replace(R.id.fragment_a_layout, nextFrag)
.commit();打开一个新片段的正确方法是什么,而不显示之前的片段呢?
@sweak使我理解,我需要一个接口,我已经在我的FragmentA类中编写了这个接口:
public interface FragmentListener {
void replaceFragments();
}然后,如果我是对的,我就在我的MainActivity.class中实现这个接口。
@Override
public void replaceFragments() {
FragmentB nextFrag = new FragmentB();
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_layout, nextFrag)
.commit();
}在我的FragmantA onClickListener中,我调用了以下方法:(FragmentListener侦听器)
listener.replaceFragments(recipeForFragment);但是现在我的问题是我的侦听器是空的,所以我需要初始化,但是我不知道怎么做。也许我在FragmentA中为它创建了一个设置器:
public void setFragmentListener(FragmentListener fragmentListener) {
this.listener = fragmentListener;
}但我该在哪里叫这位策划人什么时候?
发布于 2022-09-01 09:14:44
现有的答案出奇地不正确。
如果您有androidx.fragment:fragment-ktx:x.x.x (不记得最新版本),您可以这样做:
supportFragmentManager.commit {
replace(R.id.fragment_a_layout, nextFrag, "Some Tag If You need")
addToBackStack(null) // optional
}甚至
supportFragmentManager.commit {
replace(R.id.fragment_a_layout, YourFragment::class.java)
}这样,您甚至不需要那些愚蠢的YourFragment.newInstance()方法,因为第三个(可选的)参数是args的一个Bundle。
我肯定有一个Java等价物。
https://stackoverflow.com/questions/73557642
复制相似问题