#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 }
Комментариев нет:
Отправить комментарий