将数据从一个片段传递到另一个片段

时间:2014-03-21 19:55:40

标签: android android-intent android-fragments

我有一个包含两个片段的Activity,我需要将一个字符串从FragmentA传递给FragmentB。

要传递数据,我在FragmentA中有这个:

    Intent intent = new Intent(getActivity(), FragmentB.class);
    intent.putExtra("name", "Mark");
    startActivity(intent);

为了获取数据,我在FragmentB中做了这个。

    Intent intent = getActivity().getIntent();
    Bundle b = intent.getExtras();

    if(b!=null)
    {
        String name =(String) b.get("name");
        nameTextView.setText(name);
    }

但这不起作用。是否有特定的方法将字符串从一个片段传递到另一个片段?

4 个答案:

答案 0 :(得分:14)

  1. 如果片段由同一活动托管 - 你不能将意图投射到Fragment。片段作为Activity的一部分,它本身不是一个活动。因此,要在片段之间共享字符串,可以在Activity中声明一个静态字符串。从片段A访问该字符串以设置值并获取片段B中的字符串值。
  2. 两个片段均由不同的活动主持 - 然后,您可以使用putExtra将活动A的片段A中的字符串传递给活动B.将该字符串存储在活动B中并在片段B中使用它。

答案 1 :(得分:4)

在片段之间传递数据,您可以使用setArguments(Bundle b)。例如:

public class FragmentA extends Fragment {

  public static FragmentA newInstance(String name) {
    Bundle bundle = new Bundle();
    bundle.putString("name", name);
    FragmentA f = new FragmentA(); 
    f.setArguments(bundle);
    return f;
  }

}

答案 2 :(得分:3)

您可以执行以下操作,

 Fragment fr=new friendfragment();
 FragmentManager fm=getFragmentManager();
 android.app.FragmentTransaction ft=fm.beginTransaction();
 Bundle args = new Bundle();
 args.putString("CID", "your value");
 fr.setArguments(args);
 ft.replace(R.id.content_frame, fr);
 ft.commit(); 

要接收数据,请执行以下操作,

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    String strtext = getArguments().getString("CID");    
    return inflater.inflate(R.layout.fragment, container, false);
}

答案 3 :(得分:0)

FragmentActivity 1片段中的代码A:

fb是我创建的bean的实例,ID是参数

Intent intent = new Intent(getContext(), FragmentActivity2.class);
        intent.putExtra("id", fb.ID);
startActivity(intent);

FragmentActivity 2片段中的代码Any:

fragmentA= (FragmentActivity2) getActivity();
String cust_id = fragmentA.getIntent().getExtras().getString("id");