2013-08-31 90 views
1

我一直在使用jfeinstein的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

按標籤獲取該片段由我倒是

獲取片段的觀點

獲取在視圖上的窗口可見性將提供可視性