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地址
阅读全文
0 0
- RecyclerView的用法和ButterKnife的配置
- Studio使用ButterKnife和RecyclerView的简单配置
- ButterKnife的用法讲解
- butterknife的用法
- ButterKnife的用法
- 初识ButterKnife——ButterKnife的用法
- butterknife的配置,使用。
- butterknife的配置
- 自己的butterknife配置
- ButterKnife的配置
- ButterKnife最常用的用法
- Android RecyclerView 和CardView的用法
- butterknife 在eclipse的配置
- ButterKnife 8.0.1的配置
- ButterKnife的配置使用详解
- 使用ButterKnife时的配置
- RecyclerView的基本用法
- RecyclerView的基本用法
- 机房收费系统之八(组合查询)
- 多线程
- Python学习练习6----列表、字典的运用2
- 整数排序
- ifstream作为函数的参数要加&
- RecyclerView的用法和ButterKnife的配置
- 4.4 双线性变换法
- Ubuntu14.04下安装opencv3(anaconda3 Python3.6)
- 网络编程
- Android多线程之AsyncTask
- 剑指Offer-34
- tiny4412,将u-boot烧录到eMMC中并启动
- Usage of Inner class in java,java 内部类的使用
- W: GPG 错误:http://ppa.launchpad.net lucid Release: 由于没有公钥,无法验证下列签名: NO_PUBKEY FAF69C646FF368B7的问题