Fragment
クラスにsetTag(String tagName)
メソッドのようなものが見つかりません。私が見つけたFragment
タグを設定する唯一の方法は、FragmentTransaction
を実行し、タグ名をパラメーターとして渡すことです。
これはコードでFragment
タグを明示的に設定する唯一の方法ですか?
はい。したがって、唯一の方法はトランザクション時です。 add
、replace
を使用するか、レイアウトの一部として使用します。
過去のある時点で似たようなものを簡単に探したので、互換性のソースを調べてこれを決定しました。
この方法でフラグメントにタグを設定できます:
Fragment fragmentA = new FragmentA();
getFragmentManager().beginTransaction()
.replace(R.id.MainFrameLayout,fragmentA,"YOUR_TARGET_FRAGMENT_TAG")
.addToBackStack("YOUR_SOURCE_FRAGMENT_TAG").commit();
アクティビティレイアウトxmlファイル内にタグを提供できます。
「Android:tag属性に一意の文字列を指定してください。」
レイアウトxmlでidを割り当てるように。
Android:tag="unique_tag"
次のようなすべてのフラグメントを取得することもできます。
v4フラグメントの場合
List<Fragment> allFragments = getSupportFragmentManager().getFragments();
app.fragmentの場合
List<Fragment> allFragments = getFragmentManager().getFragments();
私はそれが6年前であることを知っていますが、誰かが同じ問題に直面しているなら、私がやったようにやってください:
-タグフィールドを持つカスタム
Fragment
クラスを作成します。
public class MyFragment extends Fragment {
private String _myTag;
public void setMyTag(String value)
{
if("".equals(value))
return;
_myTag = value;
}
//other code goes here
}
-
sectionPagerAdapter
にフラグメントを追加する前に、次のようにタグを設定します。
MyFragment mfrag= new MyFragment();
mfrag.setMyTag("TAG_GOES_HERE");
sectionPagerAdapter.AddFragment(mfrag);
これは私が見つけた最良の方法です:
public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState == null) {
// Let's first dynamically add a fragment into a frame container
getSupportFragmentManager().beginTransaction().
replace(R.id.flContainer, new DemoFragment(), "SOMETAG").
commit();
// Now later we can lookup the fragment by tag
DemoFragment fragmentDemo = (DemoFragment)
getSupportFragmentManager().findFragmentByTag("SOMETAG");
}
}
}