Как открыть навигационный ящик без панели действий, открыть с помощью одной кнопки

У меня есть панель навигации без любой панели действий (я не хочу панель действий). Я пытаюсь сделать так, чтобы у меня была кнопка, открывающая ящик навигации.

Я знаю, что существует метод openDrawer для DrawerLayout http://developer.android.com/reference/android/support/v4/widget/DrawerLayout.html#openDrawer(android.view.View)

Я не знал, как его использовать, но я пробовал делать кнопку при нажатии, запускает этот метод:

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

Когда я нажимаю на него, он дает мне исключение Java NullPointerException. У кого-нибудь есть идея?

EDIT: этот код находится внутри fragmentа, и я пытаюсь передать эти макеты ящика вне fragmentа. Я использовал отладчик, и он показывает, что mDrawlerLayout имеет значение NULL.

Любой совет?

Благодаря!

Это дает вам нулевой указатель, потому что вы пытаетесь найти макет ящика в представлении fragmentа, когда он фактически находится в представлении действий.

Быстрый взломать то, что вы хотите, – это найти вид:

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

Это должно сработать. Лучший способ – иметь метод активности для открытия ящика

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

В действии onCreate запустите findearchById:

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

mDrawerLayout должна быть переменной-членом вашей деятельности.

Затем в fragmentе вы можете позвонить:

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

Еще лучший способ сделать это – создать слушателя в fragmentе и установить активность как слушателя для fragmentа. Затем вы можете вызвать метод активности, аналогичный приведенному выше. Я расскажу вам, как это сделать.

drawerLayout.openDrawer(Gravity.START);

Благодаря @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); } }); 

Я написал ответ об этом здесь: 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; }); 

Вы непосредственно получаете текущий ящик внутри представления / fragement, так что вы не получите исключение NullPointerException

Он работает при нажатии кнопки

 mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { drawer.openDrawer(GravityCompat.START); } }); 
Давайте будем гением компьютера.