Як встановити тег фрагмента за кодом?


137

Я не знайшов setTag(String tagName)у Fragmentкласі щось подібне до методу . Єдиний спосіб встановити Fragmentтег, який я знайшов - це виконати а FragmentTransactionта передати ім'я тегу як параметр.

Це єдиний спосіб явно встановити Fragmentтег за кодом?

Відповіді:


118

Так. Тож єдиний спосіб - це час транзакції, наприклад add,replace або як частина макета.

Я визначив це за допомогою вивчення джерел сумісності, коли коротко шукав подібне в якийсь момент минулого.


2
Ваша відповідь лежить [тут] [1] у публікації про stackoverflow [1]: stackoverflow.com/questions/9363072/android-set-fragment-id
SME

2
Додати Використовувати FragmentTransaction в (интермедиат containerViewId, фрагмент фрагмент, String тег) , як описано тут: stackoverflow.com/a/13244471/4002895 @PJL ласка редагувати ваші answer.This відповідь вводить в оману людей
Dasar

Це досить незручно.
Ян Вамбай

75

Ви можете встановити тег на фрагмент таким чином:

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

7
Де я використовую цей код? У getItem у FragmentPagerAdapter?
Dr.jacky

35

Ви можете надати тег всередині файлу xml-макета своєї діяльності.

Постачання android:tag attribute унікальну рядок.

Так само, як ви призначили ідентифікатор у макеті xml.

    android:tag="unique_tag"

посилання на керівництво розробника


32
Це спрацювало б, якщо хтось використовував файл макета. Але це питання стосується динамічного встановлення тегу на Java.
ІгорГанапольський

1
ця відповідь мені була потрібна, оскільки іноді, використовуючи деякі бібліотеки, ви не маєте контролю над транзакціями з фрагментами, тому не можете програмно встановити тег. Дякую!
RJFares

3

Ви також можете отримати всі такі фрагменти:

Для v4 fragmets

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аргументів. Він буде автоматично відновлений, якщо фрагмент буде знищений, а потім відтворений ОС .

Приклад : -

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

Я зрозумів, що ти маєш на увазі. Дякую!
devhermluna

Що ти отримав?! Це не те, як ви встановите тег для Fragment не дальнім пострілом
Farid
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.