我只想替换当前片段中的片段并添加一个新片段。
我研究过替换 等于到 removeCurrent + Add anotherFragment
但在我的情况下,我遇到了一个问题。前两次它正常运行,但在第三次尝试后而不是更换。它将片段广告在我身上。
我的方法现在失败了。现在我问我怎样才能将id发送到其他片段,就像我们在Activities中一样。我有一个带有ReadMore按钮的listView。我只想在另一个片段中显示细节,并希望发送List的索引。
我听一些界面但不知道如何实现。或者有一种简单的沟通方式。我尝试通过在Constructor中传递它来做到这一点。但它会给我一个错误。因为
如何获取currentFragment并隐藏它? 如何将onBackPressed添加到片段。 如何在片段之间发送数据简单方法。
我知道如何隐藏或显示片段
getFragmentManager().beginTransaction().hide(frag[j]).commit();
getFragmentManager().beginTransaction().show(frag[0]).commit();
也知道如何添加或替换片段
getFragmentManager().beginTransaction().add(R.id.container, frag[i])
//.addToBackStack(null)
.commit();
getFragmentManager().beginTransaction().replace(R.id.container, frag[i])
//.addToBackStack(null)
.commit();
告诉我一个更好的方法来发送数据以及为什么我的布局添加而不是替换。
答案 0 :(得分:0)
使用构造函数将数据发送到片段非常容易。
在你的fragment类中,添加如下构造函数:
public class MyFragment extends Fragment{
String id;
public MyFragment(String id)
this.id = id;
}
然后,在调用片段时,您可以轻松地发送如下数据:
getSupportFragmentManager().beginTransaction().replace(android.r.id.container,new MyFragment("123")).commit();
您无法在片段中覆盖onBackPressed,您只能在活动
中执行此操作答案 1 :(得分:0)
我建议使用EventBus进行活动/片段/服务或任何其他通信。
它使它更简单,你的代码变得更清晰。
答案 2 :(得分:0)
您可以设置try将片段中的变量设置为public static
,然后您可以在实例化要显示的片段之前声明它们。
在片段的onDestroy
方法中,您可以设置变量= null,因此它们不会在内存中占用空间。
可能像这样
MyFragment.theString = "A String";
getSupportFragmentManager().beginTransaction().replace(android.r.id.container,new MyFragment()).commit();
在你的片段中
public static String theString;
...
public void onDestroy(){
super.onDestroy();
theString = null;
}