RecyclerView的用法和ButterKnife的配置

来源:互联网 发布:js设置html font size 编辑:程序博客网 时间:2024/06/16 08:35

不知道从什么时候开始,我喜欢把自己复习和学到的东西都记录下来,当哪天忘记了从博客就能找到了,哈哈,对的,我的出发点就是为了偷懒,好久没写东西,废话有点多,现在开始正题。
随着Android的发展,ListView这个强大的控件好像慢慢淡出了我们的视线,最近接触的项目中,RecyclerView这个控件逐渐取代我们所熟悉的ListView,通过自己对这个控件的研究,越了解就发现这个控件的强大之处,既能实现ListView的功能,也能实现GridView的效果,我们去看看代码。
在写代码我们先新建一个项目,繁琐的findViewById操作,是我不能忍受的,我使用的ButterKnif,两个操作就可以了,下载插件和添加依赖。
下载插件

添加依赖

项目代建好了,我们来看看代码:

public class MainActivity extends AppCompatActivity {    @BindView(R.id.activity_recycler_view)    RecyclerView mRecyclerView;    private List<JavaBean> mList;    private LinearLayoutManager mLayoutManager;    private RecyclerViewAdapter mRecyclerViewAdapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ButterKnife.bind(this);        initData();        mLayoutManager = new LinearLayoutManager(this);        mRecyclerView.setLayoutManager(mLayoutManager);        mRecyclerViewAdapter = new RecyclerViewAdapter(this, mList, mRecyclerView);        mRecyclerView.setAdapter(mRecyclerViewAdapter);    }        private void initData() {        mList = new ArrayList<>();        for (int i = 0; i < 5; i++) {            mList.add(new JavaBean("sorelion" + i));            mList.add(new JavaBean("sorelion" + i));        }    }}

我们主要来看看适配的代码

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {    private static final int TYPE_HEADER = 0;    private static final int TYPE_NORMAL = 1;    private RecyclerView mRecyclerView;    private List<JavaBean> mlist;    private Context mContext;    private View mHeaderView;    public RecyclerViewAdapter(Context context, List<JavaBean> list, RecyclerView mRecyclerView) {        this.mlist = list;        this.mContext = context;        this.mRecyclerView = mRecyclerView;        mHeaderView = LayoutInflater.from(mContext).inflate(R.layout.item1, mRecyclerView, false);    }    @Override    public RecyclerHolder onCreateViewHolder(ViewGroup parent, int viewType) {        if (viewType == TYPE_HEADER) {            return new RecyclerHolder(mHeaderView);        } else {            View view = LayoutInflater.from(mContext).inflate(R.layout.item, parent, false);            RecyclerHolder holder = new RecyclerHolder(view);            return holder;        }    }    @Override    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {        if (position == 0) {            return;        } else {            ((RecyclerHolder) holder).text.setText(mlist.get(position).getName());        }    }    @Override    public int getItemCount() {        return mlist == null ? 0 : mlist.size();    }    @Override    public int getItemViewType(int position) {        if (position == 0) {            return TYPE_HEADER;        }        return TYPE_NORMAL;    }    class RecyclerHolder extends RecyclerView.ViewHolder {        TextView text;        public RecyclerHolder(View itemView) {            super(itemView);            if (itemView == mHeaderView) return;            text = (TextView) itemView.findViewById(R.id.text);        }    }}

一个简单的demo就完成了,运行起来看看效果

到这里,已经满足了和ListView一样的效果,下面就来看看是怎么达到GridView这个控件的效果的呢,其实很简单,就在LayoutManage初始化的时候,换一个实现方式就可以了。

 mLayoutManager = new GridLayoutManager(this, 2);

跑起来就可以看到这样的效果

现在就达到了GridView的效果,但我们在项目往往中需要向我们的列表添加头和尾来达到我们的需求,那我们应该怎样去实现呢?废话就不多说了,直接上代码,想弄明白的小伙伴可以去看看源码,在适配器里复写下面这个方法

public void onAttachedToRecyclerView(RecyclerView recyclerView) {        super.onAttachedToRecyclerView(recyclerView);        RecyclerView.LayoutManager manager = recyclerView.getLayoutManager();        if (manager instanceof GridLayoutManager) {            final GridLayoutManager gridManager = ((GridLayoutManager) manager);            gridManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {                @Override                public int getSpanSize(int position) {                    return getItemViewType(position) == TYPE_HEADER                            ? gridManager.getSpanCount() : 1;                }            });        }    }

现在的界面就会变成这样

添加尾部的方式也就大同小异了,我这里就不列出来了,有兴趣的小伙伴可以去研究

代码已上传
点击进入GitHub地址

原创粉丝点击