【问题标题】:BaseActivity for Navigation导航的 BaseActivity
【发布时间】:2016-01-05 16:51:40
【问题描述】:

我正在构建一个用于导航的基本 Activity,并且想要一些灵活的东西,因此 Activity 向 Base Activity 指示要膨胀的布局。

我有以下

public abstract class BaseActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {

    private int mLayoutRes;

    protected void setLayout(int layoutRes) {
        mLayoutRes = layoutRes;
    }

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

        // Layout implements toolbar
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        if (toolbar != null){
            setSupportActionBar(toolbar);
        }


        DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
        // The layout implements the nav
        if (drawer != null){
            ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
            drawer.setDrawerListener(toggle);
            toggle.syncState();

            NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
            navigationView.setNavigationItemSelectedListener(this);
        }

    }
// Other Nav code ommitted as its too verbose
}

然后 Layout 从 Activity 传递如下

public class Home extends BaseActivity {

    private final String TAG = "Home";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.setLayout(R.layout.activity_home);
        super.onCreate(savedInstanceState);
        // Other Activity code
    }
}

有没有更好的方法来实现这一点? 也许设置一个带有内容框架的基本布局并膨胀到其中?

任何建议将不胜感激。

【问题讨论】:

  • 从概念上讲,在基类中定义 getLayout() 并在子类中覆盖它会更好。 super.set() 不是你经常看到的。

标签: android navigation-drawer


【解决方案1】:

您可以通过 Google IO 应用程序关注 BaseActivity。只需覆盖setContentView,您就不需要setLayout

这是我的 BaseActivity

package com.vtcmobile.kqviet.activity;


public class BaseActivity extends AppCompatActivity {

private Toolbar toolbar;

private DrawerLayout drawerLayout;
private ActionBarDrawerToggle drawerToggle;
private NavigationView navigationView;
protected Context mContext;


public NavigationView getNavigationView() {
    return navigationView;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mContext = BaseActivity.this;

}

@Override
public void setContentView(int layoutResID) {
    super.setContentView(layoutResID);
    initToolbar();
}

private void initToolbar() {
    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
}

private void setUpNav() {
    drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawerToggle = new ActionBarDrawerToggle(BaseActivity.this, drawerLayout, R.string.app_name, R.string.app_name);
    drawerLayout.setDrawerListener(drawerToggle);

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

    navigationView = (NavigationView) findViewById(R.id.navigation);


    // Setting Navigation View Item Selected Listener to handle the item
    // click of the navigation menu
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {

        public boolean onNavigationItemSelected(MenuItem menuItem) {

            // Checking if the item is in checked state or not, if not make
            // it in checked state
            if (menuItem.isChecked())
                menuItem.setChecked(false);
            else
                menuItem.setChecked(true);

            // Closing drawer on item click
            drawerLayout.closeDrawers();

            // Check to see which item was being clicked and perform
            // appropriate action
            Intent intent;
            switch (menuItem.getItemId()) {

            case R.id.xxxx:

                return true;



            }
            return false;
        }
    });

    // Setting the actionbarToggle to drawer layout

    // calling sync state is necessay or else your hamburger icon wont show
    // up
    drawerToggle.syncState();

}

@Override
public void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    setUpNav();

    drawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    drawerToggle.onConfigurationChanged(newConfig);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (drawerToggle.onOptionsItemSelected(item))
        return true;

    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}




 }

【讨论】:

  • 你好@Nam Trung,很好解释,但我遇到了一些问题,最后我得到了解决方案,如果有人在工具栏中遇到同样的空指针问题,你可以参考这个链接:stackoverflow.com/questions/33009469/…
【解决方案2】:

这是我实现 BaseActivity 的示例,我发现我的做法不同,它对我有用。

我的基本活动

public abstract class BaseActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener{


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


public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.

    int id = item.getItemId();
    //swap this to a switch statement

    if (id == R.id.nav_newgame) {
        // Start new game

        Log.e("Base","new Game");
    } else if (id == R.id.nav_players) {

    } else if (id == R.id.nav_history) {

    } else if (id == R.id.nav_tools) {

    } else if (id == R.id.nav_share) {

    } else if (id == R.id.nav_about) {

    }

    DrawerLayout drawer = findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}
}

任何共享同一个导航抽屉的活动

public class MainActivity extends BaseActivity
     {

         NavigationView navigationView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

navigationView = findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);

}

在您的基础活动中允许使用一个动态导航抽屉,从而省去了一遍又一遍地编写代码的麻烦。此外,您可以覆盖 Base Activity 的 Nav Drawer,并针对不同情况生成不同的结果。

【讨论】:

    【解决方案3】:

    我使用 baseactivity 的膨胀布局和重用对 BaseActivity 类进行了一些更改,您可以使用以下类仅扩展到您的任何一个 Activity 类中。

    import android.content.Context;
    import android.content.res.Configuration;
    import android.os.Bundle;
    import android.support.design.widget.NavigationView;
    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.widget.FrameLayout;
    
    
    public class BaseActivity extends AppCompatActivity {
    
    public Toolbar toolbar;
    
    public DrawerLayout drawerLayout;
    public ActionBarDrawerToggle drawerToggle;
    public NavigationView navigationView;
    public Context mContext;
    public NavigationView getNavigationView() {
        return navigationView;
    }
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mContext = BaseActivity.this;
        setContentView(R.layout.base_activity);
    
    }
    
    @Override
    public void setContentView(int layoutResID) {
        DrawerLayout fullView = (DrawerLayout)getLayoutInflater().inflate(R.layout.base_activity, null);
        FrameLayout activityContainer = (FrameLayout) fullView.findViewById(R.id.activity_content);
        getLayoutInflater().inflate(layoutResID, activityContainer, true);
        super.setContentView(fullView);
    
        initToolbar();
    }
    
    private void initToolbar() {
        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    }
    
    private void setUpNav() {
        drawerLayout = (DrawerLayout) findViewById(R.id.activity_container);
        drawerToggle = new ActionBarDrawerToggle(BaseActivity.this, drawerLayout, R.string.app_name, R.string.app_name);
        drawerLayout.setDrawerListener(drawerToggle);
    
        getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
    
        navigationView = (NavigationView) findViewById(R.id.navigation);
    
    
        // Setting Navigation View Item Selected Listener to handle the item
        // click of the navigation menu
        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
    
            public boolean onNavigationItemSelected(MenuItem menuItem) {
    
                // Checking if the item is in checked state or not, if not make
                // it in checked state
                if (menuItem.isChecked())
                    menuItem.setChecked(false);
                else
                    menuItem.setChecked(true);
    
                // Closing drawer on item click
                drawerLayout.closeDrawers();
    
                // Check to see which item was being clicked and perform
                // appropriate action
    
                Intent intent;
                switch (menuItem.getItemId()) {
                    case R.id.xxxx:
                        return true;
                }
                return false;
            }
        });
    
        // Setting the actionbarToggle to drawer layout
    
        // calling sync state is necessay or else your hamburger icon wont show
        // up
        drawerToggle.syncState();
    
    }
    
    @Override
    public void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        setUpNav();
    
        drawerToggle.syncState();
    }
    
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        drawerToggle.onConfigurationChanged(newConfig);
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (drawerToggle.onOptionsItemSelected(item))
            return true;
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
    
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    }
    

    这是我的 base_activity.xml,

    <android.support.v4.widget.DrawerLayout
    android:id="@+id/activity_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?actionBarSize"
    
            />
        <FrameLayout
            android:id="@+id/activity_content"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    
    </LinearLayout>
    <android.support.design.widget.NavigationView
        android:id="@+id/navigation"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        />
    </android.support.v4.widget.DrawerLayout>
    

    【讨论】:

    • 如果任何人在访问任何视图时都会出现空指针异常,我要求使用它为我工作的所有支持库版本 23.0.0。比如,编译 'com.android.support:appcompat-v7:23.0.0' 并编译 'com.android.support:design:23.0.0'
    【解决方案4】:
        Common Navigation DraweFor All Activity
    
        ## BaseActivity.java ##
    
         public class BaseActivity extends FragmentActivity 
        {
            final String[] navDrawMenuItems = {"My Project" , "My Project1", "MyProject2", "MyProject3" ,"MyProject4","MyProject5","MyProject6"};
            final int[] navDrawMenuIcons = {R.drawable.vendor,
                    R.drawable.vendor,
                    R.drawable.vendor,
                    R.drawable.vendor,
                    R.drawable.log_icon,
                    R.drawable.vendor,
    
            };
            public RelativeLayout mRelativeLayout;
            public FrameLayout actContent;
            public ListView navList;
            LinearLayout drawer_List;
            TextView text_emp_name;
            public MenuDrawerAdapter menuDrawerAdapter;
            public ArrayList<Vendor_Wrapper> menuDrawerList = new ArrayList<>();
            public DrawerArrowDrawable drawerArrowDrawable;
            public ImageView drawer_indicator;
            public DrawerLayout drawer_layout;
            public float offset;
            public boolean flipped;
    
            SharedPreferences _SP;
            SharedPreferences.Editor _EDITOR;
    
    
    
            @Override
            protected void onCreate(Bundle savedInstanceState)
            {
                super.onCreate(savedInstanceState);
    
                for (int i = 0; i < navDrawMenuItems.length; i++)
                {
                    menuDrawerList.add(new Vendor_Wrapper(""+i,navDrawMenuItems[i], navDrawMenuIcons[0]));
                }
    
            }
    
            @Override
            public void setContentView(int layoutResID)
    
            {
                mRelativeLayout = (RelativeLayout) getLayoutInflater().inflate(R.layout.activity_base, null);
                actContent = (FrameLayout) mRelativeLayout.findViewById(R.id.main);
                // set the drawer dialog_view as main content view of Activity.
                setContentView(mRelativeLayout);
                // add dialog_view of BaseActivities inside framelayout.i.e. frame_container
                getLayoutInflater().inflate(layoutResID, actContent, true);
    
                drawer_layout = (DrawerLayout) findViewById(R.id.drawer_layout);
                // =========================================
                final Resources resources = getResources();
                drawerArrowDrawable = new DrawerArrowDrawable(resources);
    
                drawer_indicator = (ImageView) findViewById(R.id.drawer_indicator);
                drawerArrowDrawable.setStrokeColor(resources.getColor(android.R.color.white));
                drawer_indicator.setImageDrawable(drawerArrowDrawable);
                // =========================================
    
                text_emp_name=(TextView)findViewById(R.id.text_emp_name) ;
                _SP = getSharedPreferences(Constants.pref_name, MODE_PRIVATE);
    
                text_emp_name.setText(_SP.getString("empName",""));
                drawer_List=(LinearLayout)findViewById(R.id.drawer_List);
                navList = (ListView) findViewById(R.id.drawer_List1);
                menuDrawerAdapter = new MenuDrawerAdapter(BaseActivity.this, menuDrawerList);
                navList.setAdapter(menuDrawerAdapter);
    
                navList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
                        Intent intent;
        //                Toast.makeText(getApplicationContext(),"position "+position,30).show();
                        Log.i(Constants.TAG,"drawer_position: "+position);
                        switch (position)
                        {
                            case 0:
    
                                intent = new Intent(BaseActivity.this, List_of_projects.class);
                                startActivityForResult(intent,Constants.EXIT);
        //                        
                                break;
    
                            case 1:
    
                                intent = new Intent(BaseActivity.this, List_of_projects.class);
                                startActivityForResult(intent,Constants.EXIT);
        //                        drawer_indicator.performClick();
    
                                break;
                            case 2:
                                intent = new Intent(BaseActivity.this, List_of_projects.class);
                                startActivityForResult(intent,Constants.EXIT);
        //                        drawer_indicator.performClick();
                                break;
    
                            case 3:
                                intent = new Intent(BaseActivity.this, List_of_projects.class);
                                startActivityForResult(intent,Constants.EXIT);
        //                        drawer_indicator.performClick();
                                break;
                            case 4:
                                intent = new Intent(BaseActivity.this, List_of_projects.class);
                                intent.putExtra("Type","Complaints");
                                startActivityForResult(intent,Constants.EXIT);
        //                        drawer_indicator.performClick();
                                break;
                            case 5:
                                intent = new Intent(BaseActivity.this, List_of_projects.class);
                                intent.putExtra("Type","Suggestions");
                                startActivityForResult(intent,Constants.EXIT);
                                break;
                            case 6:
                                intent = new Intent(BaseActivity.this, List_of_projects.class);
                                startActivityForResult(intent,Constants.EXIT);
                                break;
                            case 7:
    
                                System.out.println("Logout clickedddddd ");
                                SharedPreferences.Editor editor = getSharedPreferences("my_pref", MODE_PRIVATE).edit();
                                editor.clear();
                                editor.commit();
                                setResult(Constants.EXIT);
                                finish();
                                break;
    
                            default:
                                break;
                        }
    
                    }
                });
    
    
                initViewsandSharedPreferencesandSQLiteAdapter();
                clickToViews();
    
            }
    
            public void setMenuDrawer(ArrayList<Vendor_Wrapper> menuDrawerList, String email)
            {
                navList = (ListView) findViewById(R.id.drawer_List1);
                menuDrawerAdapter = new MenuDrawerAdapter(BaseActivity.this, menuDrawerList);
                navList.setAdapter(menuDrawerAdapter);
            }
    
    
            public void initViewsandSharedPreferencesandSQLiteAdapter()
            {
    
                _SP = getSharedPreferences(Constants.TAG, MODE_PRIVATE);
                _EDITOR = _SP.edit();
                drawer_indicator_LL = (LinearLayout) findViewById(R.id.drawer_indicator_LL);
    
            }
    
            /**
             * Take care of popping the fragment back stack or finishing the activity
             * as appropriate.
             */
            @Override
            public void onBackPressed()
            {
                super.onBackPressed();
    
                if (drawer_layout.isDrawerVisible(Gravity.RIGHT))
                {
                    drawer_layout.closeDrawer(drawer_List);
                }
                else
                {
                    finish();
                }
            }
    
            public void clickToViews()
            {
                drawer_layout.setDrawerListener(new DrawerLayout.SimpleDrawerListener()
                {
                    @Override
                    public void onDrawerSlide(View drawerView, float slideOffset) {
                        offset = slideOffset;
                        // Sometimes slideOffset ends up so close to but not quite 1 or 0.
                        if (slideOffset >= .995)
                        {
                            flipped = true;
                            drawerArrowDrawable.setFlip(flipped);
                        } else if (slideOffset <= .005)
                        {
                            flipped = false;
                            drawerArrowDrawable.setFlip(flipped);
                        }
    
                        drawerArrowDrawable.setParameter(offset);
                    }
                });
    
                drawer_indicator.setOnClickListener(new View.OnClickListener()
                {
                    @Override
                    public void onClick(View v)
                    {
                        if (drawer_layout.isDrawerVisible(Gravity.RIGHT))
                        {
                            drawer_layout.closeDrawer(drawer_List);
                        }
                        else
                        {
                            drawer_layout.openDrawer(drawer_List);
                        }
                    }
                });
    
                drawer_indicator_LL.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (drawer_layout.isDrawerVisible(Gravity.RIGHT)) {
                            drawer_layout.closeDrawer(drawer_List);
                        } else {
                            drawer_layout.openDrawer(drawer_List);
                        }
                    }
                });
    
            }
    
    
            public void NavigationPerformClick()
            {
                drawer_indicator.performClick();
            }
    
            private class MenuDrawerAdapter extends BaseAdapter
            {
    
                ArrayList<Vendor_Wrapper> menuDrawerList;
                Context context;
    
    
                public MenuDrawerAdapter(Context context, ArrayList<Vendor_Wrapper> menuDrawerList)
                {
                    super();
                    this.context = context;
                    this.menuDrawerList = menuDrawerList;
    
    
                }
    
                @Override
                public int getCount()
                {
                    return menuDrawerList.size();
                }
    
                @Override
                public Object getItem(int position)
                {
                    return position;
                }
    
                @Override
                public long getItemId(int position)
                {
                    return position;
                }
    
                @Override
                public View getView(int position, View convertView, ViewGroup parent)
                {
                    LayoutInflater layoutInflater = LayoutInflater.from(BaseActivity.this);
                    ViewHolder viewHolder;
    
                    if (convertView == null)
                    {
                        viewHolder = new ViewHolder();
                        convertView = layoutInflater.inflate(R.layout.row_menu_drawer, null);
    
                        viewHolder.tvTitle = (TextView) convertView.findViewById(R.id.tv_title);
                        viewHolder.imgIcon = (ImageView) convertView.findViewById(R.id.img_icon);
                        viewHolder.main_RL = (RelativeLayout)convertView.findViewById(R.id.main_RL);
                        viewHolder.imgIcon.setVisibility(View.GONE);
                        convertView.setTag(viewHolder);
                    }
                    else
                    {
                        viewHolder = (ViewHolder) convertView.getTag();
                    }
    
                    Vendor_Wrapper menuDrawerModel = menuDrawerList.get(position);
                    //## Setup Data below
                    String Name = menuDrawerModel.getName();
                    String id = menuDrawerModel.getId();
    
                    viewHolder.tvTitle.setText(menuDrawerModel.getName());
    
        //            viewHolder.main_RL.setOnClickListener(new ClickToView(BaseActivity.this,position,id,Name));
                    viewHolder.imgIcon.setImageResource(menuDrawerModel.getDrawable_icon());
    
                    return convertView;
    
                }
    
                public class ViewHolder
                {
                    TextView tvTitle;
                    ImageView imgIcon;
                    RelativeLayout main_RL;
                }
    
            }
    
    
            protected class MenuDrawerModel
            {
                private String title;
                private int icon;
                public String Icon_url;
    
                public MenuDrawerModel(String title, int icon, String icon_url) {
                    this.title = title;
                    this.icon = icon;
                    Icon_url = icon_url;
                }
    
                public MenuDrawerModel(String title, int icon)
                {
                    super();
                    this.title = title;
                    this.icon = icon;
                }
    
                public MenuDrawerModel() {
                    super();
                }
    
                public String getTitle() {
                    return title;
                }
    
                public void setTitle(String title)
                {
                    this.title = title;
                }
    
                public int getIcon() {
                    return icon;
                }
    
                public void setIcon(int icon)
                {
                    this.icon = icon;
                }
    
            }
    
    
            @Override
            protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                super.onActivityResult(requestCode, resultCode, data);
                System.out.println("Logout onActivityResult "+resultCode);
                if(resultCode==Constants.EXIT)
                {
                    setResult(Constants.EXIT);
                    finish();
                }
            }
        }
    
    
        ## MainActivity.java ##
    
            public class MainActivity extends BaseActivity {
    
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
            }
    
    
        ## activity_base.xml ##
    
            <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            xmlns:custom="http://schemas.android.com/apk/res-auto"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/white">
    
            <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">
    
                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">
    
                    <include
                        android:id="@+id/header_view"
                        layout="@layout/layout_header_view"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content" />
    
                    <FrameLayout
                        android:id="@+id/main"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:layout_below="@+id/header_view">
    
                    </FrameLayout>
    
                </RelativeLayout>
    
                <LinearLayout
                    android:id="@+id/drawer_List"
                    android:layout_width="200dp"
                    android:layout_height="match_parent"
                    android:layout_gravity="start"
                    android:layout_marginTop="50dp"
                    android:background="@color/white"
                    android:choiceMode="singleChoice"
                    android:orientation="vertical"
                    android:weightSum="10">
    
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="0dp"
                        android:layout_weight="3"
                        android:background="@drawable/bagroundg"
                        android:orientation="vertical"
                        android:visibility="gone"
                        android:weightSum="5">
    
    
                    </LinearLayout>
    
                    <ListView
                        android:id="@+id/drawer_List1"
                        android:layout_width="200dp"
                        android:layout_height="match_parent"
                        android:layout_gravity="start"
                        android:background="@color/white"
                        android:choiceMode="singleChoice" />
                </LinearLayout>
    
            </android.support.v4.widget.DrawerLayout>
    
        </RelativeLayout>
    
    
        ## activity_main.xml ##
    
            <?xml version="1.0" encoding="utf-8"?>
        <RelativeLayout 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="match_parent">
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">
    
    
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:gravity="center"
                    android:text="Hello World!"
                    android:textSize="30dp" />
    
    
            </LinearLayout>
        </RelativeLayout>
    
    
    public class Vendor_Wrapper
    {
        private String id;
    
        public Vendor_Wrapper(String id, String name, int drawable_icon)
        {
    
            this.id = id;
            Name = name;
            this.drawable_icon = drawable_icon;
        }
    
        private String Name;
        private String contact_no;
        private String Email_id;
        private String Address;
        private String img;
        private String PAY_MODE;
        private String min;
        private String max;
        private String imgs;
    
        private int drawable_icon;
    
        public int getDrawable_icon() {
            return drawable_icon;
        }
    
        public void setDrawable_icon(int drawable_icon) {
            this.drawable_icon = drawable_icon;
        }
    
    
    
    
    
        public String getEmail_id() {
            return Email_id;
        }
    
        public void setEmail_id(String email_id) {
            Email_id = email_id;
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return Name;
        }
    
        public void setName(String name) {
            Name = name;
        }
    
        public String getContact_no() {
            return contact_no;
        }
    
        public void setContact_no(String contact_no) {
            this.contact_no = contact_no;
        }
    
        public String getAddress() {
            return Address;
        }
    
        public void setAddress(String address) {
            Address = address;
        }
    
        public String getImg() {
            return img;
        }
    
        public void setImg(String img) {
            this.img = img;
        }
    
        public String getPAY_MODE() {
            return PAY_MODE;
        }
    
        public void setPAY_MODE(String PAY_MODE) {
            this.PAY_MODE = PAY_MODE;
        }
    
        public String getMin() {
            return min;
        }
    
        public void setMin(String min) {
            this.min = min;
        }
    
        public String getMax() {
            return max;
        }
    
        public void setMax(String max) {
            this.max = max;
        }
    
        public String getImgs() {
            return imgs;
        }
    
        public void setImgs(String imgs) {
            this.imgs = imgs;
        }
    
    
    
    
        public Vendor_Wrapper(String id, String name, String contact_no, String email_id, String address, String img, String PAY_MODE, String min, String max, String imgs) {
            this.id = id;
            Name = name;
            this.contact_no = contact_no;
            Email_id = email_id;
            Address = address;
            this.img = img;
            this.PAY_MODE = PAY_MODE;
            this.min = min;
            this.max = max;
            this.imgs = imgs;
        }
    
    
    }
    

    【讨论】:

    • 这将帮助您在不添加到所有活动的情况下使用通用导航抽屉
    • 看起来不错,很干净将调查将我当前的解决方案换成这个!
    • 您可以从此链接下载项目github.com/Rishisahu/BaseActivityConcept
    【解决方案5】:

    你可以参考我下面的代码,在我的基础活动中注意addContentView(这里我命名为NavigationDrawerActivity

    基础活动:

    public class NavigationDrawerActivity extends AppCompatActivity {
        private DrawerLayout mDrawerLayout;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_navigation_drawer);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
            mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
            ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                    this, mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close);
            mDrawerLayout.setDrawerListener(toggle);
            toggle.syncState();
        }
        /**
         * called in extending activities instead of setContentView...
         *
         * @param layoutId The content Layout Id of extending activities
         */
        public void addContentView(int layoutId) {
            LayoutInflater inflater = (LayoutInflater) this
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View contentView = inflater.inflate(layoutId, null, false);
            mDrawerLayout.addView(contentView, 0);
        } 
    }
    

    然后在其他活动中,例如MainActivity:

    public class MainActivity extends NavigationDrawerActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            super.addContentView(R.layout.activity_main);
        }
    }
    

    希望这会有所帮助!

    【讨论】:

    • 谢谢@BNK 这对我来说非常有效,但唯一的问题是我没有看到切换图标。相反,它总是在 ActionBar 中向我显示返回图标。你知道我们该如何解决这个问题吗?
    • 永远不要使用这种方法
    【解决方案6】:

    您可以在您的BaseActivity 中覆盖setContentView 并在超级调用之后初始化所有内容,或者将所有DrawerLayout 相关的东西移动到protected 方法并从BaseActivity 的每个孩子调用它,在你之后致电setContentView。我认为第一个应该很简单,从您发布的内容来看,您可以避免在 BaseActivity 中覆盖 onCreate

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多