Как передать значение из одного фрагмента в другой в 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 чтобы решить эту проблему. Как это работает.

  1. создать событие-Е.
  2. From Fragment-регистр событий.
  3. от fragment-B опубликовать событие-E с данными, которые вы хотите передать.
  4. вы получите данные в методе 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"));