我是Fragments的新手。我想将String值从一个Fragment传递给另一个Fragment。这该怎么做?我用以下方式调用了我的碎片。请一步一步指导我。
String cid = id.getText().toString();
Fragment fr = new FriendFragment();
android.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, fr);
ft.commit();
答案 0 :(得分:28)
您可以执行以下操作,
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);
}
答案 1 :(得分:6)
如果要将数据从片段发送到活动,可以使用界面。
但是当你想要将数据从片段发送到另一个片段时,它会变得复杂。您可能希望将数据发送到活动,然后发送到其他片段。
我使用EventBus来解决此问题。 它是如何工作的。
那就是它。无需编写自己的界面。
您可以使用eventbus进行从后台服务或线程到活动的通信。
答案 2 :(得分:0)
Fragment to Fragment通信必须通过父Activity进行。
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");
}
答案 3 :(得分:0)
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"));
答案 4 :(得分:0)
您可以尝试
第一个片段
//adding data to the bundle class
Bundle b = new Bundle();
b.putString("user_name","simon");
b.putString("user_address","nepal");
//fragment operation
FragmentTransaction transaction = getFragmentManager().beginTransaction();
Fragment fragment=new friendfragment();
fragment.setArguments(b);
transaction.replace(R.id.container, fragment);
transaction.addToBackStack(null);
transaction.commit();
//Second Fragment(Receiving Fragment)
//write following code into onCreateView() method
Bundle b = getArguments();
String name = b.getString("user_name");
String address = b.getString("user_address");