用DrawerLayout实现侧滑菜单以及其子项的点击事件

这天在写项目的时候,师傅说我的主页左上可以加一个侧滑菜单,因为之前写过,虽然是很久之前,所以还有遇到了一丢丢小问题。

首先是,原本的主界面是LinearLayout,在其之上再包含一层DrawerLayout,然后再加上侧面菜单的页面布局,记得侧滑菜单的布局中的layout_gravity为left/start,即为左侧菜单,若为right/end,则为右侧菜单。
左侧菜单页面布局:
layout_left_list.xml

<androidx.recyclerview.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/rv_left_list"
    android:layout_width="150dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="@color/white">

</androidx.recyclerview.widget.RecyclerView>

主界面页面布局:
main.xml

<androidx.drawerlayout.widget.DrawerLayout
…………
	<--! 原本的主界面页面布局-->
	<LinearLayout
	…………>
	………………
	</LinearLayout>
	<--! 左侧菜单页面布局 -->
	<include layout="@layout/layout_left_list"/>
	
</androidx.drawerlayout.widget.DrawerLayout>

注意!
此处的侧滑菜单的页面布局一定要放在原本布局之后,不然就获取不到侧滑菜单布局的点击事件了。(之前因为这个懵了很久……)
`
然后因为侧滑页面用的是RecyclerView,所以记得写好其适配器和子项的页面布局,不然没法显示数据。因为今天主要讲的是DrawerLayout,所以这里就不深究了。
主界面Activity:
MainActivity.class:

public void class MainActivity extends AppCompatActivity{

	 @BindView(R.id.rv_left_list)
	 RecyclerView mRvLeftList;
     @BindView(R.id.btn)
     Button mBtn;
     @BindView(R.id.drawer_layout)
     DrawerLayout mDrawerLayout;

	private MainLeftListAdapter mLeftAdapter;
	
 
 	@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
         setContentView(R.layout.main);
        ButterKnife.bind(this);
        initView();
        initData();
	}

	public void initView() {
		//这是设置左侧滑菜单不能通过侧滑显示
		mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
		//以下是对侧滑栏中的RecyclerView的一些处理
		mRvLeftList.setLayoutManager(new LinearLayoutManager(this));
        mLeftAdapter = new MainLeftListAdapter(this);
        mRvLeftList.setAdapter(mLeftAdapter);
        
	}

	public void initData() {
		//XXXXXX是List<Model>类型
		mLeftAdapter.setList(XXXXXX);
        mLeftAdapter.notifyDataSetChanged();
        //以下是设置在RecyclerView中的点击事件接口
		mLeftAdapter.setLeftOnClick(position -> {
            Model model = XXXXXX.get(position);
            btn.setText(model.getText());
            mDrawerLayout.closeDrawer(mRvLeftList);
        });
	}
	
	//设置按钮btn的点击事件,点击后左侧滑菜单显示
	 @OnClick(R.id.btn)
	 public void change() {
        if (! mDrawerLayout.isDrawerOpen(mRvLeftList)) {
            mDrawerLayout.openDrawer(mRvLeftList);
        }
    }
 }

以上就把Drawer Layout的实现侧滑菜单,以及其子项点击事件就完成啦!

本人只是刚入门的小萌新,有什么不对的地方,还请各位大神指点一二。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在RecyclerView的适配器中,通过设置子点击事件可以实现点击子后的相应操作。如果你发现点击的子对应不上,可能是因为没有正确地设置子点击事件。 在RecyclerView的适配器中,可以通过在`onBindViewHolder`方法中设置子点击事件实现。需要注意的是,由于RecyclerView的子是通过复用机制实现的,所以在设置子点击事件时,要确保每个子点击事件都能正确地对应到相应的子上。 以下是一个示例代码,实现了在RecyclerView的子中设置点击事件,并将点击的子的位置输出到Log中: ``` public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { private List<String> mData; public MyAdapter(List<String> data) { mData = data; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_layout, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder holder, int position) { holder.mTextView.setText(mData.get(position)); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("MyAdapter", "click position = " + position); } }); } @Override public int getItemCount() { return mData.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { TextView mTextView; public ViewHolder(View itemView) { super(itemView); mTextView = itemView.findViewById(R.id.text_view); } } } ``` 在`onBindViewHolder`方法中,通过设置`holder.itemView.setOnClickListener`来设置子点击事件。在回调函数中,可以通过`position`参数获取到当前点击的子的位置。这样就能够正确地将点击事件对应到相应的子上。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值