コードでフラグメントタグを設定する方法


137

クラスにsetTag(String tagName)メソッドのようなものが見つかりませんでしたFragmentFragment私が見つけたタグを設定する唯一の方法はFragmentTransaction、タグ名をパラメータとして渡すことです。

これはFragmentコードでタグを明示的に設定する唯一の方法ですか?

回答:


118

はい。唯一の方法は、取引時点であるので、例えば使用してaddreplaceまたはレイアウトの一部として。

過去のある時点で簡単に同様のものを探したので、互換性ソースを調べてこれを決定しました。


2
あなたの答えは、スタックオーバーフロー[1]の投稿の[ここ] [1]にあります。stackoverflow.com
SME

2
使用FragmentTransactionのadd(int型containerViewId、断片の断片、文字列タグ)ここで説明する:stackoverflow.com/a/13244471/4002895 あなたanswer.Thisは誤解を招く人々に答える@ PJLください編集
dasar

それはかなり不便です。
Ian Wambai

75

次のようにして、タグをフラグメントに設定できます。

Fragment fragmentA = new FragmentA();
getFragmentManager().beginTransaction()
    .replace(R.id.MainFrameLayout,fragmentA,"YOUR_TARGET_FRAGMENT_TAG")
    .addToBackStack("YOUR_SOURCE_FRAGMENT_TAG").commit(); 

7
このコードはどこで使用しますか?FragmentPagerAdapterのgetItemで?
Dr.jacky 2014

35

アクティビティレイアウトxmlファイル内にタグを提供できます。

android:tag attribute一意の文字列を指定します。

レイアウトxmlでIDを割り当てるのと同じです。

    android:tag="unique_tag"

開発者ガイドへのリンク


32
これは、レイアウトファイルを使用している場合に機能します。ただし、この質問は、Javaで動的にタグを設定することを指します。
IgorGanapolsky 2013年

1
一部のライブラリを使用しているときにフラグメントトランザクションを制御できず、プログラムでタグを設定できないため、これが私が必要とした答えでした。ありがとう!
RJFares

3

次のようにすべてのフラグメントを取得することもできます。

v4フラグメントの場合

List<Fragment> allFragments = getSupportFragmentManager().getFragments();

app.fragmentの場合

List<Fragment> allFragments = getFragmentManager().getFragments();

0

これは私が見つけた最良の方法です:

   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");
        }
    }
}

-1

私はそれが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);

問題は、フラグメントにプロパティを設定することではありませんでした。参照を維持せずに既存のFragmentインスタンスを取得できるようにすることでした
mkuech

-22

Fragment引数のプロパティとしてタグを追加できます。フラグメントが破棄され、OSによって再作成されると、自動的に復元されます。

:-

    final Bundle args = new Bundle();
    args.putString("TAG", "my tag");
    fragment.setArguments(args);

私はあなたの意味を理解しました。ありがとう!
devhermluna 2017

何を手に入れましたか?!これは、ロングショットではなくFragmentのタグを設定する方法ではありません
ファリッド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.