Не работает кнопка ActionBar панели навигации.

Я работаю над проектом Android, и я пытаюсь интегрировать новый навигационный ящик, используя пример из http://developer.android.com/training/implementing-navigation/nav-drawer.html .

В основном он работает, за исключением одного, кнопка действия вверх не отображает меню, но если я проведу пальцем по экрану основного действия с края, тогда появится меню, поэтому я знаю, что нет ничего плохого в фактическом меню , Его просто кнопка панели действий.

Ниже приведен код

public class MainActivity extends Activity { private DrawerLayout mDrawerLayout; private ListView mDrawerList; private ActionBarDrawerToggle mDrawerToggle; private CharSequence mTitle; private CharSequence mDrawerTitle; private String[] mPlanetTitles; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTitle = mDrawerTitle = getTitle(); mPlanetTitles = getResources().getStringArray(R.array.planets_array); mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout); mDrawerList = (ListView)findViewById(R.id.left_drawer); MenuItemAdapter menuAdapter = new MenuItemAdapter(this); menuAdapter.add(new MenuItem("Hello")); menuAdapter.add(new MenuItem("World")); menuAdapter.add(new MenuItem("Parsnips")); menuAdapter.add(new MenuItem("Turnips")); mDrawerList.setAdapter(menuAdapter); mDrawerList.setOnItemClickListener(new DrawerItemClickListener()); getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); mDrawerToggle = new ActionBarDrawerToggle( this, mDrawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_closed) { public void onDrawerClosed(View view) { getActionBar().setTitle(mTitle); invalidateOptionsMenu(); } public void onDrawerOpened(View drawerView) { getActionBar().setTitle(mDrawerTitle); invalidateOptionsMenu(); } }; mDrawerLayout.setDrawerListener(mDrawerToggle); if (savedInstanceState == null) { selectItem(0); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } private class DrawerItemClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { selectItem(position); } } private void selectItem(int position) { // update the main content by replacing fragments android.app.Fragment fragment = new PlanetFragment(); Bundle args = new Bundle(); args.putInt(PlanetFragment.ARGS_PLANET_NUMBER, position); fragment.setArguments(args); android.app.FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); mDrawerList.setItemChecked(position, true); setTitle(mPlanetTitles[position]); mDrawerLayout.closeDrawer(mDrawerList); } @Override public void setTitle(CharSequence title) { mTitle = title; getActionBar().setTitle(mTitle); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); mDrawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mDrawerToggle.onConfigurationChanged(newConfig); } public static class PlanetFragment extends android.app.Fragment { public static final String ARGS_PLANET_NUMBER = "planet_number"; public PlanetFragment() { } @Override public View onCreateView(LayoutInflater inflator, ViewGroup container, Bundle savedInstanceState) { View rootView = inflator.inflate(R.layout.fragment_planet, container, false); int i = getArguments().getInt(ARGS_PLANET_NUMBER); String planet = getResources().getStringArray(R.array.planets_array)[i]; //((TextView)rootView.findViewById(R.id.fragment_text_view)).setText(planet); getActivity().setTitle("Planet: " + planet); return rootView; } } private class MenuItem { public String menuName; public MenuItem(String menuName) { this.menuName = menuName; } } public class MenuItemAdapter extends ArrayAdapter<MenuItem> { public MenuItemAdapter (Context context) { super(context,0); } public View getView (int position, View convertView, ViewGroup parent) { convertView = null; if (convertView == null) { convertView = LayoutInflater.from(getContext()).inflate(R.layout.row_menu_item, null); } /*TextView title = (TextView)convertView.findViewById(R.id.row_title); title.setText(getItem(position).menuName); title.setVisibility(View.VISIBLE);*/ EditText title = (EditText)convertView.findViewById(R.id.row_edittext); title.setHint(getItem(position).menuName); title.setVisibility(View.VISIBLE); return convertView; } } } 

Спасибо за любую помощь, которую вы можете предоставить.

Вы забыли реализовать onOptionsItemSelected

Здесь происходит волшебство:

 @Override public boolean onOptionsItemSelected(MenuItem item) { // Pass the event to ActionBarDrawerToggle, if it returns // true, then it has handled the app icon touch event if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } // Handle your other action bar items... return super.onOptionsItemSelected(item); } 

Для тех, у кого по-прежнему возникают проблемы, вам может не хватать этот метод (который OP имеет, но я удалил):

 @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); mDrawerToggle.syncState(); } 

Его работа для меня.

 drawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mDrawer.openDrawer(GravityCompat.START); } }); 

Здесь я расскажу вам ПРОСТОЙ И ЛЕГКИЙ способ создания навигации на ящике в андроиде без использования android studio. Я только что использовал ADT для создания навигационного ящика. Вот код взглянуть

activity_main.xml

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/dr_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:id="@+id/mainContent" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/txt1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="swipe content"/> <Button android:id="@+id/bt1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text = "Click to open d"/> </RelativeLayout> <RelativeLayout android:id="@+id/drawer" android:layout_width="200dp" android:layout_height="match_parent" android:layout_gravity = "start" android:background="#FFFFFF"> <TextView android:id="@+id/txt2" android:layout_width="200dp" android:layout_height="wrap_content" android:text="drawer content are here arr"/> <Button android:id="@+id/bt2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text = "Click to open d"/> </RelativeLayout> </android.support.v4.widget.DrawerLayout> 

MainActivity.java

 package com.example.drawer1; import android.os.Bundle; import android.annotation.SuppressLint; import android.app.Activity; import android.content.res.Configuration; import android.support.v4.app.ActionBarDrawerToggle; import android.support.v4.widget.DrawerLayout; import android.support.v4.widget.DrawerLayout.DrawerListener; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.widget.Button; import android.widget.Toast; public class MainActivity extends Activity { private DrawerLayout drawerLayout; private View drawerView; Button bt1,bt2; private DrawerListener myDrawerListner; private ActionBarDrawerToggle mDrawerTogle; @SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); drawerLayout = (DrawerLayout) findViewById(R.id.dr_layout); drawerView = (View) findViewById(R.id.drawer); drawerLayout.setDrawerListener(myDrawerListner); bt1 = (Button) findViewById(R.id.bt1); bt2 = (Button) findViewById(R.id.bt2); mDrawerTogle =new ActionBarDrawerToggle(this, drawerLayout, R.drawable.ic_drawer,R.string.open_drawer,R.string.close_drawer){ public void onDrawerOpened(View drawerView) { // TODO Auto-generated method stub super.onDrawerOpened(drawerView); getActionBar().setTitle("SpeakEng"); } public void onDrawerClosed(View view) { // TODO Auto-generated method stub super.onDrawerClosed(view); getActionBar().setTitle("SpeakEng"); } }; drawerLayout.setDrawerListener(mDrawerTogle); getActionBar().setDisplayHomeAsUpEnabled(true); getActionBar().setHomeButtonEnabled(true); bt2.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub drawerLayout.closeDrawer(drawerView); } }); bt1.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub drawerLayout.openDrawer(drawerView); } }); } @Override public void onConfigurationChanged(Configuration newConfig){ super.onConfigurationChanged(newConfig); mDrawerTogle.onConfigurationChanged(newConfig); } public boolean onOptionsItemSelected(MenuItem item){ if (mDrawerTogle.onOptionsItemSelected(item)){ return true; } return super.onOptionsItemSelected(item); } @Override protected void onPostCreate(Bundle savedInstanceState){ super.onPostCreate(savedInstanceState); //Sync the toogle state after onRestoreInstanceState has occured. mDrawerTogle.syncState(); } } 

Вы можете открыть ящик 1), нажав на кнопку, 2) потянув слева, 3) щелкнув значок ящика на панели действий. Вы хотите, чтобы вы могли открыть его. Я дал вам три варианта.

Note: drawerLayout должен быть корневым элементом, как показано в коде. И продолжайте onConfigurationChanged (), onOptionsItemSelected (), onPostCreate (). Эти три метода очень важны для создания навигационного ящика.

Удачи!.

Intereting Posts
Не удается увидеть Nexus 6P для отладки Синхронизация клиент-сервер через REST Что представляют собой различные состояния вызовов в стеке телефонии Android? Как отключить собственные сообщения с тостами Использование диалога общего доступа в Android Facebook SDK. Как узнать, действительно ли пользователь разделяет или отменяет совместную деятельность? Android N – не может работать на более низком API, хотя minSDK установлен на 14 Spinner: как узнать, был ли изменен выбор предмета программным путем или действием пользователя через пользовательский интерфейс Динамически добавлять scrollview в макете и linearlayout в scrollview Приложение, вызывающее принудительное закрытие в Application Manager Android Spinner.setSelection () не работает Android IME, установите позицию курсора в EditText Поиск местоположений в определенном городе в Google Местах Apis Сдвиг повторного просмотра в последний элемент в списке Отладка Android: java.lang.ArrayIndexOutOfBoundsException Как исправить ошибку Невозможно выполнить dex: несколько файлов dex определяют Lcom / google / android / gcm / GCMBaseIntentService ;?