2017-09-04 1 views
2

TV 플랫폼 용 응용 프로그램에서 작업 중이고 탐색 용 RCU를 사용 중입니다.조각에 초점을 사용하지 않음

두 개의 조각이 서로 위에 있고 동시에 화면에 표시되는 사용 사례가 있습니다.

아래의 포커싱 조각을 사용 중지 할 수있는 방법이 있습니까? 조각보기에 setFocusable (false)가 작동하지 않아 요소를 아래 조각에 집중시킬 수 있습니다.

미리 감사드립니다.

+0

setonclicklistner를 프로그래밍 방식으로 onCreate에 추가 할 수 있습니다. –

+0

이런 식으로. https://stackoverflow.com/a/25841415/3364266 –

+0

왜 onClickListener인가? onFocusChanged 같은 것이 필요합니까? 터치 이벤트를 사용하지 마십시오. 리모콘이있는 Android TV입니다. – Veljko

답변

2

나는 결국 함께 왔어요 솔루션입니다 : 즉 조각에 대한

추가 사용자 라이프 사이클 리스너 : onFragmentResume 내가 보여줄 필요가 때 수동으로 전화 onFragmentPause 이벤트/조각을 숨기거나 전환합니다.

@Override 
public void onFragmentResume() { 

    //Enable focus 
    if (getView() != null) { 

     //Enable focus 
     setEnableView((ViewGroup) view, true); 

     //Clear focusable elements 
     focusableViews.clear(); 
    } 

    //Restore previous focus 
    if (previousFocus != null) { 
     previousFocus.requestFocus(); 
    } 
} 

@Override 
public void onFragmentPause() { 

    //Disable focus and store previously focused 
    if (getView() != null) { 

     //Store last focused element 
     previousFocus = getView().findFocus(); 

     //Clear current focus 
     getView().clearFocus(); 

     //Disable focus 
     setEnableView((ViewGroup) view, false); 
    } 
} 

/** 
* Find focusable elements in view hierarchy 
* 
* @param viewGroup view 
*/ 
private void findFocusableViews(ViewGroup viewGroup) { 

    int childCount = viewGroup.getChildCount(); 
    for (int i = 0; i < childCount; i++) { 
     View view = viewGroup.getChildAt(i); 
     if (view.isFocusable()) { 
      if (!focusableViews.contains(view)) { 
       focusableViews.add(view); 
      } 
     } 
     if (view instanceof ViewGroup) { 
      findFocusableViews((ViewGroup) view); 
     } 
    } 
} 

/** 
* Enable view 
* 
* @param viewGroup 
* @param isEnabled 
*/ 
private void setEnableView(ViewGroup viewGroup, boolean isEnabled) { 

    //Find focusable elements 
    findFocusableViews(viewGroup); 

    for (View view : focusableViews) { 
     view.setEnabled(isEnabled); 
     view.setFocusable(isEnabled); 
    } 
} 
관련 문제