如何在Android中将值从一个片段传递到另一个片段?

时间:2014-04-23 16:54:36

标签: android android-fragments bundle

我是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(); 

5 个答案:

答案 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来解决此问题。 它是如何工作的。

  1. 创建活动-E。
  2. 来自Fragment-A事件记录。
  3. 从片段B发布event-E,包含您想要传递的数据。
  4. 您将在Fragment-A中编写的onEvent()方法中获取数据。
  5. 那就是它。无需编写自己的界面。

    您可以使用eventbus进行从后台服务或线程到活动的通信。

    结帐EventBus HowToRepository

答案 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");