您需要將您的數據從Fragment X傳遞到您的FragmentActivity,這會將此數據傳遞到您的Fragment Y.您通過在您的fragment類中定義的接口來實現此目的,並實例化一個在onAttach()。如何做到這一點這裏 Communication With other Fragments
簡單的例子
更多信息,可以考慮片段A和片段B片段A是列表片段,每當一個項目被選中它會有什麼變化顯示在片段B.很簡單,對嗎?
首先,定義片段A.
public class FragmentA extends ListFragment{
//onCreateView blah blah blah
}
而這裏的片段B
public class FragmentB extends Fragment{
//onCreateView blah blah blah
}
這是我的FragmentActivity將統治他們都
public class MainActivity extends FragmentActivity{
//onCreate
//set up your fragments
}
想必你有這樣的事情已經,現在這裏是你將如何改變FragmentA(我們需要從中獲取一些數據的列表片段)。
public class FragmentA extends ListFragment implements onListItemSelectedListener, onItemClickListener{
OnListItemSelectedListener mListener;
//onCreateView blah blah blah
// Container Activity must implement this interface
public interface OnListItemSelectedListener {
public void onListItemSelected(int position);
}
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
mListener = (OnListItemSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnListItemSelectedListener");
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
//Here's where you would get the position of the item selected in the list, and pass that position(and whatever other data you need to) up to the activity
//by way of the interface you defined in onAttach
mListener.onListItemSelected(position);
}
這裏最重要的考慮是你的父Activity實現了這個接口,否則你會得到一個異常。如果成功實施,每次選擇列表片段中的項目時,您的活動都會被通知其位置。很明顯,你可以用任何數量或類型的參數來改變你的接口,在這個例子中,我們只是傳入整數位置。希望這個澄清一個人,祝你好運。
有很多方法可以做到這一點,我喜歡儘可能的去耦合,爲此我喜歡一個事件總線。請參閱otto,例如:http://square.github.io/otto/。 (讓你擺脫所有的界面/監聽器,傳遞數據,用強大的類型來做,用簡潔明瞭的方式來做。) –
它看起來很有希望。我必須檢查一下。謝謝你的提示。 –