繁体   English   中英

单击导航抽屉中RecyclerView中的项目后如何关闭导航抽屉

[英]How to close the navigation drawer after clicking on item in RecyclerView that is in the nav drawer

我有一个里面有RecyclerView的导航抽屉。 当单击RecyclerView中的项目时,我可以使用以下RecyclerAdapter成功导航到所需的活动:

public class AdapterNavigation extends RecyclerView.Adapter<AdapterNavigation.Holder> {

    private List<NavigationItem> mItemList;
    private Context mContext;


    //this class takes a context and a list of the items you want to populate into the recycler view
    public AdapterNavigation(Context context, List<NavigationItem> itemList) {
        mItemList = itemList;
        mContext = context;


    }
    @Override
    public Holder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        //our xml showing how one row looks
        View row = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recycler_view_navigation, viewGroup, false);


        Holder holder = new Holder(row);
        return holder;
    }

    @Override
    public void onBindViewHolder(Holder holder, final int position) {
        holder.recyclerNavigation.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final Intent intent;
                switch (position){
                    //specify what activity will launch on click
                    case 0:
                        intent =  new Intent(mContext, Maintenance.class);
                        break;
                    case 1:
                        intent =  new Intent(mContext, Contact.class);
                        break;
                    default:
                        intent =  new Intent(mContext, MainActivity.class);
                        break;
                }

                mContext.startActivity(intent);

            }
        });

        NavigationItem item = mItemList.get(position);

        holder.iconImageView.setImageResource(item.getIcon());
        holder.titleTextView.setText(item.getTitle());
        holder.countTextView.setText(Integer.toString(item.getCount()));


    }

    @Override
    public int getItemCount() {
        return mItemList.size();
    }

    public class Holder extends RecyclerView.ViewHolder {
        protected ImageView iconImageView;
        protected TextView titleTextView;
        protected TextView countTextView;
        protected RelativeLayout recyclerNavigation;

        public Holder(View view) {
            super(view);
            iconImageView = (ImageView) view.findViewById(R.id.iconImageView);
            titleTextView = (TextView) view.findViewById(R.id.titleTextView);
            countTextView = (TextView) view.findViewById(R.id.countTextView);
            //the whole view
            recyclerNavigation = (RelativeLayout) view.findViewById(R.id.recyclerNavigation);
        }

    }



}

现在,我要做的就是在单击某项之前关闭导航抽屉。 当您在android Gmail应用程序的导航菜单中单击某个项目时,它的外观。

因此,在此之前:

mContext.startActivity(intent);

我将关闭导航抽屉。

问题是获得对该导航抽屉的引用。 我正在考虑从我所拥有的上下文中获取观点,因为这就是我所拥有的。

有没有办法做到这一点,还是我必须更改一些代码?

首先,每次绑定一个Viewholder时都将创建一个clicklistener。 考虑在查看器的构造函数中this设置一个clicklistener。 您可以在侦听器中使用ViewHolder.getAdapterPosition()

要回答这个问题,您已经将Context传递给了适配器,为什么不同时将其(和视图持有者)传递给导航抽屉呢?

获取抽屉布局的参考,并在mContext.startActivity(intent)之前添加以下行; cabinetLayout.closeDrawers();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM