RecycleView 实现左右列表并排

来源:互联网 发布:广州轩辕网络怎么样 编辑:程序博客网 时间:2024/05/17 07:25

网上关于ListView的左右列表并排挺多,但是现在基本上都没用ListView 了,今天来写写RecycleView左右列表并排。

页面布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent">    <android.support.v7.widget.RecyclerView        android:id="@+id/left_list"        android:layout_width="90dp"        android:layout_height="match_parent"        android:background="@color/white"        android:scrollbars="none" />    <android.support.v7.widget.RecyclerView        android:id="@+id/right_list"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:scrollbars="none" /></LinearLayout>
ok,接下来看leftAdapter

public class MostLeftAdapter extends RecyclerView.Adapter {    private Context mContext;    private List<String> mList = new ArrayList<>();    private MyItemClickListener mItemClickListener;    private int mPosition;    private static int TYPE_NORMAL = 101;    private static int TYPE_SELECT = 102;    public MostLeftAdapter(Context context) {        mContext = context;        mPosition = 0;    }    public void setList(List<String> list) {        mList = list;    }    public List<String> getList() {        return mList;    }    public void setOnItemClickListener(MyItemClickListener listener) {        this.mItemClickListener = listener;    }    @Override    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {        //根据type显示布局,选中与未选中,当然你可以自行修改        if (viewType == TYPE_SELECT) {            final View view = LayoutInflater.from(mContext).inflate(R.layout.most_left_list_item, parent, false);            return new ItemViewSelectHolder(view, mItemClickListener);        } else {            final View view = LayoutInflater.from(mContext).inflate(R.layout.most_left_list_item, parent, false);            return new ItemViewHolder(view, mItemClickListener);        }    }    @Override    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {        ItemViewHolder item = (ItemViewHolder) holder;        item.mostLeftText.setText(mList.get(position));    }    @Override    public int getItemCount() {        return mList.size();    }    @Override    public int getItemViewType(int position) {        if (position == mPosition) {            return TYPE_SELECT;        } else {            return TYPE_NORMAL;        }    }    public void setPosition(int position) {        mPosition = position;    }    public interface MyItemClickListener {        void onItemClick(View view, int postion);    }    public class ItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {        private MyItemClickListener mListener;        @BindView(R.id.most_left_text)        TextView mostLeftText;        public ItemViewHolder(View itemView, MyItemClickListener listener) {            super(itemView);            this.mListener = listener;            itemView.setOnClickListener(this);            ButterKnife.bind(this, itemView);        }        @Override        public void onClick(View v) {            if (mListener != null) {                mListener.onItemClick(v, getLayoutPosition());            }        }    }    private class ItemViewSelectHolder extends ItemViewHolder {        public ItemViewSelectHolder(View view, MyItemClickListener listener) {            super(view, listener);            itemView.setBackgroundDrawable(mContext.getResources().getDrawable(R.drawable.most_left_select_bg));            mostLeftText.setTextColor(mContext.getResources().getColor(R.color.red_pre));        }    }
,注释写的很清楚了,相信都能看懂。

右边列表adapter就不贴了,需要的下面会给下载链接。

下面看一下activity里面的逻辑:

//设置左边数据源private void getLeftName() {    for (int i = 0; i < 5; i++) {        ChoiceLeftBean bean = new ChoiceLeftBean();        if (i == 1) {            bean.setName("宝马");        }        if (i == 2) {            bean.setName("奔驰");        }        if (i == 3) {            bean.setName("凯迪拉克");        }        if (i == 4) {            bean.setName("现代");        }        if (i == 0) {            bean.setName("SUV");        }        mPriceList.add(bean);    }    List<String> prices = new ArrayList<>();    for (ChoiceLeftBean priceBean : mPriceList) {        prices.add(priceBean.getName());    }    leftAdapter.setList(prices);    //默认根据left的第一项数据去加载右边得数据    requestRightData(0);    leftAdapter.notifyDataSetChanged();    leftAdapter.setOnItemClickListener(new MostLeftAdapter.MyItemClickListener() {        @Override        public void onItemClick(View view, int position) {            //设置position,根据position的状态刷新            leftAdapter.setPosition(position);            leftAdapter.notifyDataSetChanged();            requestRightData(position);        }    });}

首先简单绑定了左列表的数据,同时初始化右列表,代码都有注释,这里不多说。

改变右侧列表数据源:

private void requestRightData(int position) {    //这里为了方便,直接更改左边的数据为右边加载的数据了,实际开发中改为所传参数即可    String category = leftAdapter.getList().get(position);    List<MostSeriesBean> list = new ArrayList<>();    MostSeriesBean beans = new MostSeriesBean();    beans.setName(category);    list.add(beans);    getRightData(list);}
是不是很简单。最后贴张效果图:



下载地址:https://github.com/hedongBlog/MyApplication




1 0
原创粉丝点击