如何从当前片段获取数据到其他片段?

时间:2014-08-11 05:37:27

标签: android android-fragments fragment

我正在使用Fragment作为我当前的应用程序。这里我有一个Fragment FA,我正在导航到另一个Fragment FB,我已经将FA添加到了Backstack,因为我想要在FB片段中完成一些事件的FA片段。我在片段FB中有一个完成按钮。单击该按钮我需要在片段FB中执行两项操作,如下所示: -

(a)中。我需要完成当前的片段FB。 (b)中。其次,我需要将一些数据从FB传递到已经存在的Fragment FA,因为我已经将它添加到了Backstack中。

我刚刚开始使用片段并且对它们了解不多,我想解决这个问题。任何人都可以为此提出建议,任何帮助都会很明显。

先谢谢。

1 个答案:

答案 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();
   }
  }