Android点击出现侧边栏:openDrawer和closeDrawer的使用

在制作侧边栏的过程中,我希望能够有向右滑动出现侧边栏,点击按钮也能够出现侧边栏

于是通过网络上查找代码和资料,实现了滑动出现侧边栏

但是在制作点击出现侧边栏的时候却遇到了问题——点击按钮的时候程序错误退出了,提示如下

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.widget.DrawerLayout.openDrawer(int)' on a null object reference

也就是说获取了一个空指针,然后我加了一个

drawerLayout = (DrawerLayout) findViewById(R.id.drawerlayout);/*重点,获取主界面的布局,因为没有这句话我才报错*/

我的代码如下:
activity_main.xml

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

    <RelativeLayout
       /*主页面布局,省略*/
    </RelativeLayout>
	
    /*下面是我的左侧边栏布局*/
    <RelativeLayout
        android:id="@+id/left"
        android:layout_width="200dp"
        android:layout_height="match_parent"
        android:layout_gravity="left" /*重点,只有设置了这个属性之后才能识别是向左弹出还是向右弹出*/
        android:background="@android:color/white" >

        <ListView
            android:id="@+id/left_listview"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
        </ListView>
    </RelativeLayout>

    <RelativeLayout
        /*右侧边栏,省略*/
    </RelativeLayout>

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

MainActivity.java(请直接看我做注释的重点)

public class MainActivity extends AppCompatActivity {

    private List<ContentModel> list = new ArrayList<ContentModel>();
    DrawerLayout drawerLayout;/*重点,声明DrawerLayout*/

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

        ListView listView = findViewById(R.id.left_listview);
        initData();
        ContentAdapter adapter = new ContentAdapter(this, list);
        listView.setAdapter(adapter);

        drawerLayout = (DrawerLayout) findViewById(R.id.drawerlayout);/*重点,获取主界面的布局,因为没有这句话我才报错*/
        ImageView leftMenu = findViewById(R.id.leftmenu);/*重点,获取点击弹出侧边栏的组件*/
        leftMenu.setOnClickListener(new OnClickListener() {/*重点,点击监听*/

            @Override
            public void onClick(View v) {
                drawerLayout.openDrawer(Gravity.LEFT);/*重点,LEFT是xml布局文件中侧边栏布局所设置的方向*/
            }
        });

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
                switch ((int) id) {
                    case 1:
                        TextView tv=findViewById(R.id.theText);
                        tv.setText("dianjile");
                        break;
                    case 2:
                        TextView tv1=findViewById(R.id.theText);
                        tv1.setText("dianjile");
                        break;

                    default:
                        break;
                }
                drawerLayout.closeDrawer(Gravity.LEFT);/*重点,自动关闭侧边栏*/
            }
        });

    }

    private void initData() {
        list = new ArrayList<ContentModel>();

        list.add(new ContentModel(R.mipmap.lv, "新闻", 1));
        list.add(new ContentModel(R.mipmap.lv, "订阅", 2));
        list.add(new ContentModel(R.mipmap.lv, "图片", 3));
        list.add(new ContentModel(R.mipmap.lv, "视频", 4));
        list.add(new ContentModel(R.mipmap.lv, "跟帖", 5));
        list.add(new ContentModel(R.mipmap.lv, "投票", 6));
    }

}

关于openDrawer和closeDrawer使用的具体详解

源自:https://www.cnblogs.com/Cc1231/p/5208444.html

如下代码

DrawerLayout mdrawerLayout;
Button btn;
btn.setOnClickListener(new OnClickListener(){
      mdrawerLayout.openDrawer(Gravity.LEFT);//设置的方向应该跟xml文件里gravity相同,start和LEFT都为从左边出现
      mdrawerLayout.closDrawers();//没有参数,关闭所有的出现的抽屉
});

drawerLayout.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/dl_left"
    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="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World"/>
    </LinearLayout>
    <!--抽屉拉开后的布局,即ListView所在的布局-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#fff"
        android:orientation="vertical"
        android:gravity="center"
        android:layout_gravity="start">
        <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/lv_left_menu"
            android:divider="@null">
        </ListView>
    </LinearLayout>
</android.support.v4.widget.DrawerLayout>
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android Studio抽屉侧边Demo是一个基于Android Studio的示例应用程序,它演示了如何在Android应用程序中实现抽屉侧边。抽屉侧边是一个常见的UI模式,它允许用户通过从屏幕边缘滑动来访问应用程序的导航菜单和其他功能。 在这个Demo中,抽屉侧边是通过使用DrawerLayout和NavigationView实现的。DrawerLayout是一个布局容器,它允许您将一个或多个视图放在一个可滑动的抽屉中。NavigationView是一个用于显示导航菜单的视图,它可以轻松地与DrawerLayout一起使用。 在代码中,您可以看到以下几个关键点: 1.在布局文件中定义DrawerLayout和NavigationView。 2.在Activity中设置ActionBarDrawerToggle,它是一个用于处理抽屉侧边打开和关闭事件的类。 3.在Activity中设置DrawerLayout的监听器,以便在抽屉侧边打开和关闭时执行相应的操作。 下面是一个简单的代码示例,演示如何在Android Studio中实现抽屉侧边: ``` // 在布局文件中定义DrawerLayout和NavigationView <android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> <android.support.design.widget.NavigationView android:id="@+id/navigation_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:menu="@menu/navigation_menu" /> </android.support.v4.widget.DrawerLayout> // 在Activity中设置ActionBarDrawerToggle mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.string.drawer_open, R.string.drawer_close); mDrawerLayout.addDrawerListener(mDrawerToggle); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); // 在Activity中设置DrawerLayout的监听器 mDrawerLayout.setDrawerListener(new DrawerLayout.SimpleDrawerListener() { @Override public void onDrawerOpened(View drawerView) { super.onDrawerOpened(drawerView); // 打开抽屉侧边时执行的操作 } @Override public void onDrawerClosed(View drawerView) { super.onDrawerClosed(drawerView); // 关闭抽屉侧边时执行的操作 } }); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值