Страницы

Поиск по вопросам

понедельник, 6 января 2020 г.

Как узнать какой тип Fragmenta в Android?

#java #android


Всем привет.

Есть три вида Фрагментов.

    ArtistFragment artistFragment = new ArtistFragment();
    AlbumFragment albumFragment = new AlbumFragment();
    SongFragment songFragment = new SongFragment();


Fragment один из трех выше предложенный возвращается с помощью функции.

Fragment fragment = pagerAdapter.getItem(position);


Как узнать какой Fragment вернулся? Смутно помню в Java была такая функция instanceOF?
    


Ответы

Ответ 1



Есть два способа узнать класс фрагмента. Можно, как вы сами уже сказали, методом instanceof: Fragment f = getActivity().getFragmentManager().findFragmentById(R.id.fragment_container); if (f instanceof CustomFragmentClass) //что-то сделать с f А можно прикреплять к фрагменту специальный тэг, который будет уникальным для фрагмента каждого типа: fragTrans.replace(android.R.id.content, myFragment, "MY_FRAGMENT"); В последствие, по этому тэгу вы сможете понять тип фрагмента: MyFragment f = (MyFragment)getFragmentManager().findFragmentByTag("MY_FRAGMENT"); if (f!= null && f.isVisible()) //что-то сделать с f

Ответ 2



Да, можно с помощью instanceof. Например Fragment fragment = pagerAdapter.getItem(position); if(fragment instanceof SongFragment) { //SongFragment } else { //другой фрагмент} Ещё можно имя класса получить так: Fragment fragment = pagerAdapter.getItem(position); String className=fragment.getClass().getSimpleName();

Ответ 3



ну да можно: Fragment fr = pagerAdapter.getItem(position); if ( fr instanceof ArtistFragment) { // } else if ( fr instanceof AlbumFragment) { // } else if ( fr instanceof SongFragment) { // } а можно простой проверкой класса: Fragment fr = pagerAdapter.getItem(position); if ( fr.getClass() == ArtistFragment.class) { // } else if ( fr.getClass() == AlbumFragment.class) { // } else if ( fr.getClass() == SongFragment.class) { // }

Ответ 4



Да конечно можно проверить с помощью instanceof, получится что то вроде Fragment fragment = pagerAdapter.getItem(position); if (fragment instanceof ArtistFragment) { ...; } else if (fragment instanceof AlbumFragment){...} Но вроде как использование instanceof не есть хорошо. Как вариант можно у фрагментов устанавливать тэг, и по нему уже узнавать какого типа фрагмент.

Ответ 5



Можно так: if (fragment instanceof ArtistFragment) { //some actions for ArtistFragment } else if (fragment instanceof AlbumFragment) { //some actions for AlbumFragment } else if (fragment instanceof SongFragment ) { //some actions for SongFragment }

Комментариев нет:

Отправить комментарий