2013-07-23 7 views
27

작업 표시 줄이없는 탐색 모음이 있습니다 (나는 동작 표시 줄이 필요 없습니다). 탐색 용 서랍을 열 수있는 버튼을 만들도록 노력 중입니다.버튼이없는 탐색 표시 줄을 여는 방법

DrawerLayout mDrawerLayout = (DrawerLayout) getView().findViewById(R.id.drawer_layout); 
mDrawerLayout.openDrawer(mDrawerLayout); 
:

내가 거기에 알고 내가 그것을 사용하는 방법을 알고하지 않았다 DrawerLayout http://developer.android.com/reference/android/support/v4/widget/DrawerLayout.html#openDrawer(android.view.View)

에 대한 openDrawer라는 방법입니다,하지만 난 때 클릭 버튼을 시도,이 방법을 실행

그것을 클릭하면 Java NullPointerException이 발생합니다. 아무 생각 없나요?

편집 : 이 코드는 조각 안에 있으며 조각 밖으로 해당 서랍 레이아웃을 참조하려고합니다. 디버거를 사용했고 mDrawlerLayout이 NULL임을 보여줍니다.

어떤 조언이 필요합니까?

감사합니다.

+0

편집을 추가했습니다. – CynthiaDDurazo

답변

42

사실 액티비티 뷰에있을 때 조각보기에서 서랍 레이아웃을 찾으려고하기 때문에 null 포인터가 생깁니다. 작동해야

getActivity().findViewById(R.id.drawer_layout) 

:

당신이 원하는 것을 할 수있는 빠른 해킹과 같은보기를 찾는 것입니다. 더 좋은 방법은 findViewById를 실행 한 OnCreate 활동에 서랍

public void openDrawer(){ 
    mDrawerLayout.openDrawer(mDrawerLayout); 
} 

을 열기위한 활동의 ​​방법을 가지고있다 :

mDrawerLayout = (DrawerLayout) getView().findViewById(R.id.drawer_layout); 

mDrawerLayout이 활동의 ​​멤버 변수이어야한다.

는 그런 다음 조각에 당신이 호출 할 수 있습니다

//cast activity to MyActivity so compiler doesn't complain 
((MyActivity)getActivity()).openDrawer(); 

그것을 할 수있는 더 좋은 방법은 조각에서 리스너를 만들고 조각에 청취자로서 활동을 설정하는 것입니다. 그런 다음 위와 비슷한 활동에 대한 메소드를 호출 할 수 있습니다. 어떻게하는지에 대한 조사를 해 줄 것입니다.

+0

감사합니다. 당신은 나를 위해 많은 것을 명확히했습니다. – CynthiaDDurazo

+12

나는 그것을 만들기 위해'openDrawer' 메쏘드에서'mDrawerLayout.openDrawer (Gravity.LEFT);를 사용해야했습니다. (두 조각 및 작업 표시 줄없이 탐색 창을 사용하고 있습니다.) 그렇지 않으면 응용 프로그램이 중단됩니다. –

+0

기본 아이콘을 제거 할 수 있습니까? 그 위치에서 나는 다른 옵션 메뉴를 사용하고 싶다. – JCarlos

28

drawerLayout.openDrawer(Gravity.START);

0

나는 여기에 대한 답을 썼다 : https://stackoverflow.com/a/18199771/880349

//For me a better way in avoiding a `null pointer` in getting the DrawerLayout 
    final DrawerLayout drawer = (DrawerLayout) getActivity().findViewById(R.id.drawer_layout); 
    btn.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
          //Opens the Drawer 
       drawer.openDrawer(Your View, Usually a ListView); 
      } 

       return false; 
     }); 

당신이 경우 NullPointerException을받지 않습니다 있도록 직접보기 /의 fragment 내부 현재 서랍을 얻을

0

버튼 클릭시 작동

mButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      drawer.openDrawer(GravityCompat.START); 

     } 
    }); 
1

@athor 덕분에 & @Ashish Tana.

내가 받고있는 오류 (NullPointerException)를 알아 내는데 너무 많은 시간이 걸렸습니다.

광산은 이렇게 작동합니다. getView() 대신 getActivity()을 사용하고 서랍을 mDrawerLayout.openDrawer(Gravity.LEFT);까지 엽니 다.

mDrawerLayout = (DrawerLayout) getActivity().findViewById(R.id.drawer_layout); 
final ImageButton btnOpenDrawer = (ImageButton) getView().findViewById(R.id.drawer_menu); 

     btnOpenDrawer.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mDrawerLayout.openDrawer(Gravity.LEFT); 
      } 
     }); 
+0

이 작업은 정말 작동합니다 onCreate (Bundle savedInstanceState) { super.onCreate (savedInstanceState); // 코드를 여기에 입력하십시오 } – Faisal