Как передать значение из одного фрагмента в другой в Android?
Я новичок в фрагментах. Я хочу передать строковое значение из одного фрагмента в другой. как это сделать? Я назвал свои фрагменты следующим образом. пожалуйста, ведите меня шаг за шагом.
String cid = id.getText().toString();
Fragment fr = new FriendFragment();
android.app.FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.content_frame, fr);
ft.commit();
4 ответов
Вы можете сделать что-то вроде ниже,
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);
}
Если вы хотите отправить данные из фрагмента в действие, вы можете использовать интерфейс.
но когда вы хотите отправить данные из фрагмента в другой фрагмент, это сделать сложно. Вы хотите отправить данные в activity, а затем в другой фрагмент.
Я использую EventBus чтобы решить эту проблему. Как это работает.
- создать событие-Е.
- From Fragment-регистр событий.
- от fragment-B опубликовать событие-E с данными, которые вы хотите передать.
- вы получите данные в методе onEvent (), который вы написали во фрагменте-A.
фрагмент к фрагменту связь должна осуществляться через родительскую деятельность.
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 или использовать идентификатор вашего фрагмента, просто используйте 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"));