我正在使用Fragment作为我当前的应用程序。这里我有一个Fragment FA,我正在导航到另一个Fragment FB,我已经将FA添加到了Backstack,因为我想要在FB片段中完成一些事件的FA片段。我在片段FB中有一个完成按钮。单击该按钮我需要在片段FB中执行两项操作,如下所示: -
(a)中。我需要完成当前的片段FB。 (b)中。其次,我需要将一些数据从FB传递到已经存在的Fragment FA,因为我已经将它添加到了Backstack中。
我刚刚开始使用片段并且对它们了解不多,我想解决这个问题。任何人都可以为此提出建议,任何帮助都会很明显。
先谢谢。
答案 0 :(得分:0)
您可以将数据从一个片段传递到另一个片段,如下所示。
Fragment fragment;
fragment = new SingleImage();
Bundle bundle = new Bundle();
bundle.putString("img",actorsList.get(position).getImage());
bundle.putString("desc",actorsList.get(position).getDesc());
fragment.setArguments(bundle);
getActivity().getFragmentManager().beginTransaction().replace(R.id.content_frame, fragment).addToBackStack( "tag" ).commit();
意味着您可以添加带有片段的参数以传递给另一个。
您可以使用以下代码
在另一个片段中获取该数据 Bundle bundle = this.getArguments();
if(bundle != null)
{
tvdesc.setText(bundle.getString("desc"));
img_url= bundle.getString("img");
}
由于每个Fragment只需要一个后向堆栈条目,因此将后面的状态名称设为Fragment的类名(通过getClass()。getName())。然后在替换Fragment时,使用popBackStackImmediate()方法。如果返回true,则表示后端堆栈中存在Fragment的实例。如果没有,实际执行Fragment替换逻辑。
private void replaceFragment (Fragment fragment){
String backStateName = fragment.getClass().getName();
FragmentManager manager = getSupportFragmentManager();
boolean fragmentPopped = manager.popBackStackImmediate (backStateName, 0);
if (!fragmentPopped){ //fragment not in back stack, create it.
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.content_frame, fragment);
ft.addToBackStack(backStateName);
ft.commit();
}
}