如何在Android中将一个片段的值传递给另一个片段?

我是碎片的新手。 我想从一个片段传递一个string值到另一个。 这个怎么做? 我用下面的方式叫我的碎片。 请一步一步指导我。

String cid = id.getText().toString(); Fragment fr = new FriendFragment(); android.app.FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.content_frame, fr); ft.commit(); 

Solutions Collecting From Web of "如何在Android中将一个片段的值传递给另一个片段?"

你可以做下面的事情,

  String cid=id.getText().toString(); Fragment fr=new friendfragment(); FragmentManager fm=getFragmentManager(); android.app.FragmentTransaction ft=fm.beginTransaction(); Bundle args = new Bundle(); args.putString("CID", cid); 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); } 

如果你想从片段发送数据到活动,你可以使用一个接口。

但是,当你想从片段发送数据到另一个片段时,会变得很复杂。 你会想要发送数据到活动,然后到另一个片段。

我使用EventBus来解决这个问题。 怎么运行的。

  1. 创build一个事件-E。
  2. 从片段 – 事件注册。
  3. 从片段B发布事件-E到要传递的数据。
  4. 你会得到你在Fragment-A中写的onEvent()方法中的数据。

而已。 不需要编写自己的接口。

您也可以使用事件总线进行后台服务或线程通信。

也检出EventBus HowTo和Repository 。

片段通信必须通过父活动完成。

FragmentToSendData

 interface <interfaceName>{ void <abstract method>(String str); } @Override public void onAttach(Activity activity) { super.onAttach(activity); try{ <instance of the interface> = (<interface>)getActivity(); }catch (ClassCastException e) { throw new ClassCastException(getActivity().toString() + " must implement <interface>"); } } 

ActivityWithBothFragments (这可以通过ViewPager,或使用您的片段的ID,只需使用findFragmentById())

 @Override <abstract method from frag1>(String str){ FragmentToReceiveData fragment2 = (FragmentToReceiveData)getSupportFragmentManager().findFragmentByTag(ViewPagerAdapter.getFragmentTag(1)); fragment2.getStringFromFrag1(String str); } 

FragmentToReceiveData

 public void getStringFromFrag1(String str){ <textview>.setText("str"); } 
 try this : - send data : Bundle arg = new Bundle(); arg.putInt("ID", "12"); //arg.putInt("KEY", "VALUE") arg.putString("NAME","Jaydeep");//arg.putString("KEY","VALUE") YourFragment fragment = new YourFragment(); fragment.setArguments(arg); fragmentManager.beginTransaction().add("PUT YOUR FRAM ID", fragment, fragment.getClass().getName()) .addToBackStack(null) .commit(); - receive data : Bundle bundle = getIntent().getExtras(); bundle.getInt("ID"); bundle.getString("NAME"); Log.e("Receive data : " ,"\nID - "+bundle.getInt("ID")+"\nNAME - "+bundle.getString("NAME"));