2013-08-31 1 views
1

나는 jfeinstein의 SlidingMenu을 사용하고 있습니다. 현재 특정 단편이 사용자에게 표시되는지 확인하려고합니다. 먼저 시도 :안드로이드 조각 파편을 비교하는 방법?

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

를 태그로 조각을 받거나 내가

을 거라고하여 얻기 조각의보기

가져 오기 보기의 창 표시가 가시성을 제공합니다