Как установить тег фрагмента по коду?
Я не нашел что-то вроде setTag(String tagName)
метод в Fragment
учебный класс. Единственный способ установить Fragment
тег, который я нашел, делает FragmentTransaction
и передача имени тега в качестве параметра.
Это единственный способ явно установить Fragment
тег по коду?
7 ответов
Да. Таким образом, единственный способ - во время транзакции, например, используя add
, replace
или как часть макета.
Я определил это путем изучения источников совместимости, так как я кратко искал подобное в какой-то момент в прошлом.
Вы можете установить тег для фрагмента следующим образом:
Fragment fragmentA = new FragmentA();
getFragmentManager().beginTransaction()
.replace(R.id.MainFrameLayout,fragmentA,"YOUR_TARGET_FRAGMENT_TAG")
.addToBackStack("YOUR_SOURCE_FRAGMENT_TAG").commit();
Вы можете предоставить тег внутри вашего XML-файла макета активности.
Msgstr "Укажите в атрибуте android:tag уникальную строку."
так же, как вы назначаете идентификатор в формате XML.
android:tag="unique_tag"
Вы также можете получить все фрагменты, как это:
Для фрагментов v4
List<Fragment> allFragments = getSupportFragmentManager().getFragments();
Для app.fragment
List<Fragment> allFragments = getFragmentManager().getFragments();
Это лучший способ, который я нашел:
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");
}
}
}
В настоящее время есть более простой способ добиться этого, если вы используете
DialogFragment
(не
Fragment
):
val yourDialogFragment = YourDialogFragment()
yourDialogFragment.show(
activity.supportFragmentManager,
"YOUR_TAG_FRAGMENT"
)
Под капотом
show()
метод действительно создает
FragmentTransaction
и добавляет тег, используя
add()
метод. Но гораздо удобнее пользоваться
show()
метод на мой взгляд.
Вы можете сократить это на
Fragment
тоже, используя расширение Kotlin:)
Я знаю, что это было 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
аргументы. Он будет автоматически восстановлен, если фрагмент будет уничтожен, а затем воссоздан ОС.
Пример:-
final Bundle args = new Bundle();
args.putString("TAG", "my tag");
fragment.setArguments(args);