Fragment X から FragmentActivity にデータを渡す必要があります。FragmentActivity は、このデータを Fragment Y に渡します。これは、フラグメント クラスで定義されたインターフェイスを介して行い、onAttach() で定義されたコールバックをインスタンス化します。
これを行う方法の詳細については、こちらを参照してください
。他のフラグメントとの通信
簡単な例として、フラグメント 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 にその位置が通知されます。明らかに、任意の数またはタイプのパラメーターを使用してインターフェースを変更できます。この例では、整数の位置を渡しているだけです。これがちょっとした人を明確にすることを願っています、頑張ってください。