Как установить тег фрагмента по коду?
Я не нашел что-то вроде 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-файла макета активности.
" поставьте атрибут android: tag с уникальной строкой."
так же, как вы назначаете id в XML-формате макета.
android:tag="unique_tag"
вы также можете получить все фрагменты вроде этого:
для версии V4 fragmets
List<Fragment> allFragments = getSupportFragmentManager().getFragments();
для приложения.фрагмент
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");
}
}
}
вы можете добавить тег в качестве свойства для Fragment
аргументов. Он будет автоматически восстановлен, если фрагмент будет уничтожен, а затем воссоздан OS.
пример:-
final Bundle args = new Bundle();
args.putString("TAG", "my tag");
fragment.setArguments(args);