2016-08-18 3 views
1

제목에서 알 수 있듯이 앱의 탐색 창에있는 항목에 길게 누르는 기능을 추가하려고합니다. 이러한 항목은 동적으로 추가되며 (navigation_drawer_menu.xml에서 부 풀리지 않음) XML 파일에 일부 속성을 지정하여이를 해결할 수 없습니다.길 안내 기능을 탐색 서랍 항목에 추가하는 방법은 무엇입니까?

특히 Stackoverflow에 대한 몇 가지 질문을 보았습니다 : How to set a long click listener on a MenuItem (on a NavigationView)?. setActionView 솔루션을 구현했지만 탐색 서랍 항목의 오른쪽 가장자리에 빈 버튼이 표시됩니다. 텍스트를 길게 누르면 아무 일도 일어나지 않습니다. 오랫동안 빈 ​​버튼을 누르면 내가 원하는 것을 얻습니다.

전체 menuItem에 대해 OnLongClickListener를 설정하려면 어떻게해야합니까? (버튼이라고 가정하고있을뿐 아니라) 오른쪽면에있는 것이 아닙니다. 읽어 주셔서 감사합니다. 더 많은 정보가 필요하면 도와 드리겠습니다.

+0

아직 해결 방법을 찾았습니까? 나는 같은 문제가있다. –

+0

나는 그저 버튼 오른쪽에있는 아이콘을 사용하여 클릭 할 수있게하기로 결정했습니다. –

답변

0

동일한 문제가있어서 NavigationView의 뷰 계층 구조를 파헤쳐 문제를 해결할 수있었습니다.

첫 번째 단계는 NavigationView의보기 계층 구조를 이해하는 것입니다. this post의 코드를 사용하여 NavigationView의 뷰 계층 구조를 인쇄 할 수 있습니다.

그런 다음 타겟팅하는보기를 파기 시작하십시오. 내 경우 :

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 

    // Start digging into the view hierarchy until the correct view is found 
    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
    ViewGroup navigationMenuView = (ViewGroup)navigationView.getChildAt(0); 
    ViewGroup navigationMenuItemView = (ViewGroup)navigationMenuView.getChildAt(2); 
    View appCompatCheckedTextView = navigationMenuItemView.getChildAt(0); 

    // Attach click listener 
    appCompatCheckedTextView.setOnLongClickListener(new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      Log.i("test", "LONG CLICK"); 
      return true; 
     } 
    }); 

    return super.onPrepareOptionsMenu(menu); 
}