2013-08-31 2 views
1

Я использую jfeinstein's SlidingMenu. В настоящее время я пытаюсь найти, является ли определенный фрагмент видимым для пользователя. Я сначала попробовал:Android, как сравнить фрагменты?

if(mainfrag.isVisible()){ 
     Log.d("Frag","Main is visible"); 
    }else{ 
     Log.d("Frag","Main is NOT visible"); 
    } 

Который всегда печатал, что фрагмент НЕ был виден. Затем я попробовал:

android.support.v4.app.FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
Log.d("Frag","CurFrag: "+fragmentManager.findFragmentById(R.id.content_frame).toString()); 

MainFragment mf = new MainFragment(); 
if(fragmentManager.findFragmentById(R.id.content_frame) == mf){ 
    Log.d("Frag","This is Main"); 

}else{ 
    Log.d("Frag","This is NOT Main :("); 

} 

Печатается

enter image description here

Так что я знаю, что findFragmentById скажет мне текущий фрагмент, но я не знаю, как я могу логически сравнить его, так что я могу сделать вещи, только если это видно.

+0

umm! существует метод ' \t \t public void setUserVisibleHint (boolean isVisibleToUser) {}' –

+0

Если все ваши фрагменты являются разными классами, вы можете сделать простой экземпляр 'instanceof'. В качестве альтернативы, дайте каждому фрагменту уникальный тег (и не забудьте предоставить его каждому «FragmentTransaction»). –

ответ

7

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

Но в вашей второй проблеме вы сравниваете два разных объекта.

MainFragment mf = new MainFragment(); 
fragmentManager.findFragmentById(R.id.content_frame) == mf 

Здесь вы создаете новый MainFragment и пытаетесь сравнить его со старым экземпляром. Это никогда не может быть правдой. При сравнении объектов сравнивается адрес. Он будет возвращать true только в том случае, если они являются одними и теми же объектами.

Если вы просто хотите проверить класс объекта, используйте следующий код:

Fragment f = fragmentManager.findFragmentById(R.id.content_frame); 
if(f instanceof MainFragment) 
    // code here. 
+0

спасибо за ваше решение, сэкономьте свое время. –

0

Получить фрагмент по тэгу или я бы

Получить вид фрагмента

Get видимость окна на вид обеспечит видимость

Смежные вопросы