2014-04-23 179 views
8

我是片段的新手。我想從一個片段傳遞一個字符串值到另一個片段。這個怎麼做?我通過以下方式調用碎片。請一步一步指導我。如何在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(); 

回答

27

你可以做類似下面,

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); 
} 
+0

如何在其他片段接收它? – user3256145

+0

@ user3256145:看到我編輯的答案哥們。 –

+0

如果數據量很大,會造成泄漏,您應該使用界面設計模式進行片段之間的通信。 –

0

片段到碎片通信必須通過父活動來完成。

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

} 
+0

是否需要在onDetach()上清除接口的<實例>? – Jonas

5

如果你想從片段發送數據到活動,你可以使用一個接口。

但是,當你想從片段發送數據到另一個片段時,它變得複雜。你會想要發送數據到活動,然後到另一個片段。

我用EventBus來解決這個問題。 它是如何工作的。

  1. 創建事件-E。
  2. 從片段 - 事件註冊。
  3. 從片段B發佈事件-E到想要傳遞的數據。
  4. 您將在Fragment-A中編寫的onEvent()方法中獲取數據。

就是這樣。不需要編寫自己的接口。

您也可以使用eventbus進行後臺服務或線程的通信。

結賬EventBus HowToRepository也。

+0

我可以請你回顧一下嗎? [如何提供個人開源庫?](https://meta.stackexchange.com/q/229085) –

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")); 
相關問題