在我的项目中的所有活动中使用导航抽屉

时间:2016-03-13 09:43:37

标签: java android

我在AbstractActivity.class中创建了一个导航抽屉,我想在我的所有活动中使用该抽屉,所以我创建了另一个抽屉类并在另一个活动中扩展该类但它不起作用,任何人都可以告诉我什么是错的我的代码?

Abstractactivity.class

package com.astro.famouspandit.Activities.Abstract;

import android.content.Intent;
import android.content.res.Configuration;
import android.media.Image;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.ListView;

import com.astro.famouspandit.Activities.Activity.ChartStyle;
import com.astro.famouspandit.Activities.Activity.Contact;
import com.astro.famouspandit.Activities.Activity.Settings;
import com.astro.famouspandit.Activities.Activity.Welcome;
import com.astro.famouspandit.R;

public class AbstractActivity extends AppCompatActivity {
    private String[] mPlanetTitles;
    private LinearLayout mDrawerList;
    protected DrawerLayout mDrawerLayout;
    protected ActionBarDrawerToggle mDrawerToggle;
    private CharSequence mDrawerTitle;
    private CharSequence mTitle;
    protected Toolbar toolbar;
    protected FrameLayout framelayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_abstract);
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);

        mPlanetTitles = getResources().getStringArray(R.array.planets_array);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (LinearLayout) findViewById(R.id.left_drawer);
        framelayout = (FrameLayout)findViewById(R.id.content_frame);


        mTitle = mDrawerTitle = getTitle().toString();
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                toolbar, R.string.drawer_open, R.string.drawer_close){

            public void onDrawerClosed(View view) {
                super.onDrawerClosed(view);
                getSupportActionBar().setTitle(mTitle);
                invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
            }

            /** Called when a drawer has settled in a completely open state. */
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                getSupportActionBar().setTitle(mDrawerTitle);
                invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()
            }


        };



        mDrawerLayout.setDrawerListener(mDrawerToggle);


    }

    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        // Sync the toggle state after onRestoreInstanceState has occurred.
        mDrawerToggle.syncState();
    }
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mDrawerToggle.onConfigurationChanged(newConfig);
    }

    public void setTitle(CharSequence title) {

        mTitle = title;
        getSupportActionBar().setTitle(mTitle);
    }
    public boolean onPrepareOptionsMenu(Menu menu) {
        // If the nav drawer is open, hide action items related to the content view
        boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
        menu.findItem(R.id.action_Aboutus).setVisible(!drawerOpen);
        return super.onPrepareOptionsMenu(menu);
    }
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu, menu);
        return true;


    }

    private void selectItem(int position) {
        switch(position) {
            case 1:
                Intent a = new Intent(this, Welcome.class);
                startActivity(a);
                break;
            case 2:
                Intent b = new Intent(this, Welcome.class);
                startActivity(b);
                break;
            default:
        }
    }

    public boolean onOptionsItemSelected(MenuItem item){
        int items = item.getItemId();
        switch(items){

            case R.id.action_Settings:{
                Intent intent = new Intent(this,Settings.class);
                startActivity(intent);

            }break;

            case R.id.action_Contact_us:{
                Intent intent = new Intent(this,Contact.class);
                startActivity(intent);

            }break;

            case R.id.action_Aboutus:{
                Intent intent = new Intent(this,ChartStyle.class);
                startActivity(intent);

            }break;

            case R.id.action_Profile:{
                Intent intent = new Intent(this,ChartStyle.class);
                startActivity(intent);

            }break;
        }

        return super.onOptionsItemSelected(item);
    }


}

activity_abstract.xml

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <include layout="@layout/toolbar"/>
    <!-- The main content view -->
    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <!-- The navigation drawer -->
    <LinearLayout android:id="@+id/left_drawer"
        android:layout_width="280dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:orientation="vertical"
        android:choiceMode="singleChoice"
        android:divider="@android:color/transparent"
        android:dividerHeight="0dp"

        android:background="#0F6177">
        <LinearLayout android:id="@+id/view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <include layout="@layout/navigation_drawer"></include>
        </LinearLayout>

    </LinearLayout>


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

NavigationActivity.class

package com.astro.famouspandit.Activities.Abstract;

import android.content.res.Configuration;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewStub;
import android.widget.FrameLayout;
import android.widget.LinearLayout;

import com.astro.famouspandit.R;

public abstract class NavigationActivity extends AppCompatActivity implements View.OnClickListener{

    protected DrawerLayout mDrawerLayout;
    private LinearLayout mFrameLayout_HeaderView;
    protected FrameLayout mFrameLayout_ContentFrame;
    protected ActionBarDrawerToggle mActionBarDrawerToggle;
    protected Toolbar mToolbar;

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_navigation);

        mFrameLayout_ContentFrame = (FrameLayout) findViewById(R.id.main_activity_content_frame);

        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);

        mFrameLayout_HeaderView = (LinearLayout) findViewById(R.id.mainLayout);
        mFrameLayout_HeaderView.setOnClickListener(this);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.main_activity_DrawerLayout);
        mDrawerLayout.closeDrawers();
        mDrawerLayout.setStatusBarBackground(R.color.colorPrimary);

        mActionBarDrawerToggle = new ActionBarDrawerToggle
                (
                        this,
                        mDrawerLayout,
                        mToolbar,
                        R.string.drawer_open,
                        R.string.drawer_close
                ) {
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {
                // Disables the burger/arrow animation by default
                super.onDrawerSlide(drawerView, 0);
            }
        };

        mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);

        if (getSupportActionBar() != null) {
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
            getSupportActionBar().setDisplayShowHomeEnabled(true);
            getSupportActionBar().setHomeButtonEnabled(true);
        }
        mActionBarDrawerToggle.syncState();

    }


}

activity_navigationactivity.xml

<android.support.v4.widget.DrawerLayout    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main_activity_DrawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <!-- The main content view -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <include layout="@layout/toolbar" />

        <FrameLayout
            android:id="@+id/main_activity_content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>

    <!-- The navigation drawer -->
    <include layout="@layout/navigation_drawer" />

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

我正在扩展NavigationActivity类

的类
public class Welcome extends NavigationActivity implements View.OnClickListener{
    private CardView mAstro,mMatch,mPanch,mAsk,mContact;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getLayoutInflater().inflate(R.layout.activity_welcome,mFrameLayout_ContentFrame);

1 个答案:

答案 0 :(得分:0)

这是一个相当常见的问题,一直在博客上发表。实际上,您希望使用包含导航抽屉的布局创建BaseActivity,然后让其他活动扩展BaseActivity并在BaseActivity的布局中扩展其布局。这样您就可以在所有活动中使用导航抽屉,并重复使用代码来设置抽屉(因为该代码位于BaseActivity中)。

您可以在此处找到示例实现以及更详细的说明:http://lucas-dev.com/blog/entry/base-activities-sliding-menu.html

相关问题