したがって、Frag A と Fragment B を制御する Activity AB があるとします。MY
ANSWER:
変数が Frag A と Frag B で使用される場合は、それを Activity AB に入れます。次に、必要なものすべてを Frag A または Frag B に渡します。または、Frag A または Frag B にアクティビティ AB から取得させます。変数が Frag A のみまたは Frag B のみで使用されている場合は、それぞれ Frag A または Frag B に配置します。
Frag A と Frag B の両方で使用されるメソッドの場合、それらのメソッドを別のクラスに配置し、使用する 2 つのフラグメントのそれぞれについて Frag A と Frag B 内にそのクラスのインスタンスを作成します。
以下は、私が別の方に回答したものです。しかし、それはあなたの質問に関連していると思われるので、ここに再投稿します。
フラグメント A の内部 u には、Activity AB が実装できるインターフェイスが必要です。サンプル Android コードでは、次のようになっています。
private Callbacks mCallbacks = sDummyCallbacks;
/* このフラグメントを含むすべてのアクティビティが実装する必要があるコールバック インターフェイス。このメカニズムにより、アイテムの選択をアクティビティに通知できます。*/
public interface Callbacks {
/*Callback for when an item has been selected. */
public void onItemSelected(String id);
}
/*A dummy implementation of the {@link Callbacks} interface that does nothing. Used only when this fragment is not attached to an activity. */
private static Callbacks sDummyCallbacks = new Callbacks() {
@Override
public void onItemSelected(String id) {
}
};
Callback インターフェイスは、フラグメントの 1 つ (フラグメント A としましょう) の中に配置されます。この Callbacks インターフェイスの目的は、Frag A 内のネストされたクラスのようなもので、どのアクティビティでも実装できると思います。したがって、フラグメント A が TV であった場合、コールバックは、アクティビティ AB がフラグメント A を使用できるようにする TV リモート (インターフェース) です。私は初心者なので、詳細については間違っているかもしれませんが、プログラムをすべての画面サイズで完全に動作させることができました。これが私が使用したものです。
フラグメント A の内部には、次のものがあります (これは Android のサンプル プログラムから取得しました)。
@Override
public void onListItemClick(ListView listView, View view, int position, long id) {
super.onListItemClick(listView, view, position, id);
// Notify the active callbacks interface (the activity, if the
// fragment is attached to one) that an item has been selected.
mCallbacks.onItemSelected(DummyContent.ITEMS.get(position).id);
//mCallbacks.onItemSelected( PUT YOUR SHIT HERE. int, String, etc.);
//mCallbacks.onItemSelected (Object);
}
そして、Activity AB 内で onItemSelected メソッドをオーバーライドします。
public class AB extends FragmentActivity implements ItemListFragment.Callbacks {
//...
@Override
//public void onItemSelected (CATCH YOUR SHIT HERE) {
//public void onItemSelected (Object obj) {
public void onItemSelected(String id) {
//Pass Data to Fragment B. For example:
Bundle arguments = new Bundle();
arguments.putString(“FragmentB_package”, id);
FragmentB fragment = new FragmentB();
fragment.setArguments(arguments);
getSupportFragmentManager().beginTransaction().replace(R.id.item_detail_container, fragment).commit();
}
したがって、Activity AB 内では、基本的にすべてを Bundle に投入して B に渡します。Bundle の使用方法がわからない場合は、クラスを調べてください。
基本的に Android が提供するサンプル コードを使用します。DummyContent のものを含むもの。新しい Android アプリケーション パッケージを作成すると、MasterDetailFlow という名前のパッケージになります。