gpt4 book ai didi

android - 用同一类的另一个 fragment 替换一个 fragment

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:02:53 26 4
gpt4 key购买 nike

我有一个 fragment (我们称它为MyFragment),它根据参数中传递的参数扩充不同的布局。
如果 MyFragment 从不同的 fragment 开始,一切都很好。但是,如果 MyFragment 处于 Activity 状态并且我想启动一个具有不同布局参数的新 MyFragment,则 fragmentManager 根本不会创建新 fragment .

data.setInt("Layout index",i);
fragmentTab0 = (Fragment) new MyFragment();
fragmentTab0.setArguments(data);
fragmentTransaction.replace(R.id.fragmentContent, fragmentTab0, "MY");
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

我如何 强制 说服fragmentTransaction再次启动 fragment ?

注意:这里重点是我需要重新inflate一个布局,这和之前inflate的布局不同。代码如下:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

switch( getArguments().getInt("Layout index") ) {
case 1:
rootView = inflater.inflate(R.layout.firstlayout, container, false);
break;
case 2:
rootView = inflater.inflate(R.layout.secondlayout, container, false);
break;
case 3:
rootView = inflater.inflate(R.layout.thirdlayout, container, false);
break;
default: break;
}

最佳答案

旁路解决方案
说明(胡佛看到)

自源代码为 fragmentTransaction.replace/add/remove 是 不可用 我找不到真正发生的事情。但它是 合理地认为在某些时候它比较当前类(class) name 替换类名,如果它们是 一样。 。感谢@devconsole 指出来源 代码。我现在知道为什么会这样了。 <强> FragmentManager.removeFragment() 方法不重置 fragment 状态,它保持 RESUMED,然后 方法 moveToState(CREATED) 只初始化一个 fragment if (f.mState <
newState)
= if (RESUMED < CREATED) = false 。否则,ergo,它只是恢复 fragment 。

所以为了解决这个问题,我创建了一个几乎是空的 fragment ,它的唯一目的是用目标 fragment 替换自己。

public class JumpFragment {

public JumpFragment() {
}

@Override
public void onStart() {
Bundle data = getArguments();
int containerId = data.getString("containerID");
String tag = data.getString("tag");
//Class<?> c = data.get???("class");
//Fragment f = (Fragment) c.newInstance();
Fragment f = (Fragment) new MyFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
f.setArguments(data);
fragmentTransaction.replace(containerId, f, tag);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}

}

我用它:

data.setInt("Layout index",i);
data.setInt("containerID",R.id.fragmentContent);
data.setString("tag","MY");
fragmentTab0 = (Fragment) new JumpFragment();
fragmentTab0.setArguments(data);
fragmentTransaction.replace(R.id.fragmentContent, fragmentTab0);
fragmentTransaction.commit();

现在没有 fragment 被相同类的 fragment 替换:

MyFragment -> JumpFragment -> MyFragment

我还没有想出如何通过参数包传递类,使其完全通用。

关于android - 用同一类的另一个 fragment 替换一个 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17148285/

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