Android Navigation Drawer не добавляет кнопку меню ActionBar

Моя программа в настоящее время позволяет мне открывать панель навигации, проводя пальцем, но не отображает кнопку меню, поэтому я могу нажать кнопку меню, чтобы открыть ее. У меня есть функции onPostCreate и onOptionsItem Overide, но я не верю, что они когда-либо вызываются. Как решить эту проблему. Минимальный уровень API моих программ - 8, поэтому я не знаю, является ли это проблемой. Спасибо!

Основное действие:

public class Home_Page extends ActionBarActivity implements AdapterView.OnItemClickListener{

NavigationDrawer drawerLayout;
ListView listViewLeft, listViewRight;
String selectedMenuItem;
MyListViewAdapter myListViewAdapter;
int[] images = {R.drawable.menu_icon, R.drawable.menu_icon, R.drawable.menu_icon, R.drawable.menu_icon};
String[] listViewLeftItems = {"Home", "Choice 2", "Choice 3", "Choice 4"};
Intent intent;

@TargetApi(Build.VERSION_CODES.HONEYCOMB)
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home__page);

    drawerLayout = new NavigationDrawer(this, (DrawerLayout) findViewById(R.id.drawerLayout), getSupportActionBar());
    drawerLayout.createDrawer();

    initializeVar();

    myListViewAdapter = new MyListViewAdapter(this, images, listViewLeftItems);
    listViewLeft.setAdapter(myListViewAdapter);
    listViewLeft.setOnItemClickListener(this);

}

public void initializeVar(){
    listViewLeft = (ListView) findViewById(R.id.drawerListLeft);
    listViewRight = (ListView) findViewById(R.id.drawerListRight);
}

@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
    drawerLayout.closeDrawers();
    switch(position){
        case 0:
            selectListViewItemLeft(position);
            new Thread() {
                public void run() {
                    try {
                        intent = new Intent(Home_Page.this, Home_Page.class);
                        startActivity(intent);
                        finish();
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }.start();
            break;
        case 1:
            selectListViewItemLeft(position);
            new Thread() {
                public void run() {
                    try {
                        Intent intent = new Intent(Home_Page.this, AddAthlete.class);
                        startActivity(intent);
                        finish();
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }.start();
            break;
        case 2:
            selectListViewItemLeft(position);
            break;
        case 3:
            selectListViewItemLeft(position);
            break;
    }
}

public void selectListViewItemLeft(int position){
    listViewLeft.setItemChecked(position, true);
    selectedMenuItem = listViewLeftItems[position];
}
}

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

public class NavigationDrawer extends Activity{
DrawerLayout drawerLayout;
ActionBarDrawerToggle drawerToggle;
Activity currentActivity;
android.support.v7.app.ActionBar actionBar;

NavigationDrawer(Context context, DrawerLayout drawerLayout, android.support.v7.app.ActionBar actionBar) {
    this.currentActivity = (Activity) context;
    this.drawerLayout = drawerLayout;
    this.actionBar = actionBar;
}

@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public void createDrawer() {

    drawerToggle = new ActionBarDrawerToggle(currentActivity, drawerLayout, R.drawable.menu_icon, R.string.drawer_open, R.string.drawer_closed) {
        @TargetApi(Build.VERSION_CODES.HONEYCOMB)
        @Override
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            actionBar.setTitle("Menu");
        }

        @TargetApi(Build.VERSION_CODES.HONEYCOMB)
        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
            actionBar.setTitle(getTitle());
        }
    };
    drawerLayout.setDrawerListener(drawerToggle);
    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setIcon(android.R.color.transparent);
    actionBar.setHomeButtonEnabled(true);
}
public void closeDrawers(){
    drawerLayout.closeDrawers();
}

// Displays toggle button to expand drawer
@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    drawerToggle.syncState();
    Log.e("", "onPostCreate Run");
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if(drawerToggle.onOptionsItemSelected(item)){
        Log.e("", "onOptionsItemSelected Run");
        return true;
    }
    return super.onOptionsItemSelected(item);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    drawerToggle.onConfigurationChanged(newConfig);
    Log.e("", "onConfigurationChanged Run");
}

}

person Joe Eigi    schedule 02.06.2015    source источник
comment
Многие проблемы, класс ящика навигации должен быть фрагментом. И все методы переопределения должны быть в самом классе ActionBarActivity.   -  person zIronManBox    schedule 02.06.2015


Ответы (1)


В файле макета вашей активности используйте макет ящика в качестве родительского макета и добавьте панель инструментов в качестве дочернего представления. Например:

    <?xml version="1.0" encoding="utf-8"?>
        <android.support.v4.widget.DrawerLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/DrawerLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:elevation="7dp">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical>

                <include
                    android:id="@+id/tool_bar"
                    layout="@layout/tool_bar"></include>
                <!-- Add your Main Content Here -->

            </LinearLayout>

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_gravity="left">

            <!-- Add your Drawer layout content here -->

             </FrameLayout>


        </android.support.v4.widget.DrawerLayout>

И ваш макет панели инструментов, tool_bar.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar                                                  `       xmlns:android="http://schemas.android.com/apk/res/android"`
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="@color/action_bar_color"
    app:theme="@style/ThemeOverlay.AppCompat.ActionBar"
    android:theme="@style/ThemeOverlay.AppCompat.Dark">

</android.support.v7.widget.Toolbar>
person Zahid    schedule 02.06.2015