Android では、FragmentTransaction で Fragment のタグを設定できます。
フラグメントにタグを設定する必要があるのはなぜですか?
フラグメントがそのタグに基づいて動作を変更した場合、それは良い習慣ですか?
Android では、FragmentTransaction で Fragment のタグを設定できます。
フラグメントにタグを設定する必要があるのはなぜですか?
フラグメントがそのタグに基づいて動作を変更した場合、それは良い習慣ですか?
フラグメント タグを使用してFragment
、Activity
向きの変更を再作成することを回避できます。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.photos_image_pager);
MyFragment fragment;
if (savedInstanceState != null) {
fragment = (MyFragment) getFragmentManager()
.findFragmentByTag("my_fragment_tag");
} else {
fragment = new MyFragment();
fragment.setArguments(getIntent().getExtras());
getFragmentManager()
.beginTransaction()
.add(android.R.id.content, fragment, "my_fragment_tag")
.commit();
}
}
はActivity
向きが変わると再作成され、そのonCreate(...)
メソッドが呼び出されます。Fragment
が破棄される前に が作成され、タグでActivity
に追加された場合、同じタグでFragmentManager
から取得できるようになりました。FragmentManager
使用方法に関するより長い議論については、次を参照してください。
フラグメントにタグを設定する必要があるのはなぜですか?
Fragment
は、 によってバックグラウンド ワーカーとして使用されることがありますActivity
。このようなフラグメントには UI がなく、非 UI フラグメントとも呼ばれます。このString tag
フラグメントを識別する唯一の方法です。このフラグメントを追加するには、add(Fragment, String)
をとらないメソッドを使用しますView Id
。例えば:
FragmentManager fm = getFragmentManager();
workFragment.setTargetFragment(this, 0);
fm.beginTransaction().add(workFragment, "work").commit();
その後、このフラグメントの使用への参照を取得するには、
workFragment = (WorkFragment)fm.findFragmentByTag("work");
参照を使用して、UI フラグメントworkFragment
内のこのフラグメントのすべてのメソッドにアクセスできます。非 UI フラグメントの完全な例を次に示します。Activity
フラグメントがそのタグに基づいて動作を変更した場合、それは良い習慣ですか?
Activity
タグの使用からフラグメントの動作を変更しなければならない状況があります。そうしても問題ないはずです。この方法を使用しているオープン ソース アプリをいくつか見てきました。基本的に、文字列タグをフラグメントに提供します。FragmentManager
これは、後で簡単に検索できるように、 内のフラグメントにタグを付けるために使用されます。からその動作を変更またはアクセスしますActivity
。
例: ユーザーがSettingsActivity
からMainActivity
に切り替え、設定を変更し、戻るボタンを押して MainActivity に戻ります。MainActivity#onResume() で設定の変更を検出し、新しい設定に従って現在のフラグメントの動作を更新または変更できます。
FragmentManager fm = getFragmentManager();
uiFragment = (UiFragment) fm.findFragmentByTag("ui");
uiFragment.fetchNewData();
uiFragment.displayNewData();