前言
Android Material Design越来越流行,以前很常用的 ListView 现在也用RecyclerView代替了,实现原理还是相似的。笔者实现一下 RecyclerView,代码比较简单,适合初学者,如有错误,欢迎指出。
源码地址(欢迎star) https://github.com/studychen/SeeNewsV2
本文链接 http://www.alijava.com/recyclerview-basics/ 转载请注明出处
复习 ListView
ListView 实现过程中需要复写BaseAdapter,主要是这4个方法
public int getCount()
:适配器中数据集中 数据的个数,即ListView需要显示的数据个数public Object getItem(int position)
: 获取数据集中与指定索引对应的数据项public long getItemId(int position)
: 获取指定行对应的IDpublic View getView(int position, View convertView, ViewGroup parent)
:获取每一个Item的显示内容
一般
ListView
每一项都是相同的布局,若想各个项实现不同的布局,可复写getItemViewType
和getViewTypeCount
实现
RecyclerView 实现
xml 布局
RecyclerView
中每一项的布局 item_article_type_1.xml
|
|
布局思路就是 CardView
里面嵌入了一个LinearLayout
。图片部分用固定宽度100dp
,文字部分利用android:layout_weight="1"
占据了其他部分。
TextView
利用android:gravity="center"
使得标题的文字居中。
LinearLayout
里面利用android:gravity="center"
使得"2015-01-09 科学研究院 1129次"
居中,
新闻详情内容的TextView
利用
|
|
将文章内容限定为2行,超出部分用省略号显示。
预览效果
新闻列表的 xml
文件,fragment_article.xml
|
|
实现 Adapter
主要步骤是:
- 根据上面的
item_article_type_1.xml
实现一个class ImageItemArticleViewHolder extends RecyclerView.ViewHolder
- 实现
ItemArticleListAdapter extends RecyclerView.Adapter <>
重写三个方法public int getItemCount()
public TestAdapter.ImageItemArticleViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
public void onBindViewHolder(ImageItemArticleViewHolder holder, int position)
|
|
新闻实体类 javabean
有新闻的 index,图片 url,标题,发布时间,来源,阅读次数,新闻内容预览
fragment 里面使用 RecyclerView
思路就是开启一个异步线程,读取多条新闻,加入List<ItemArticle>
,由这个List
构造ItemArticleAdapter
,最后利用setAdapter()
方法给RecyclerView
加上适配器。
|
|
效果图
利用修改布局,线性显示或者宫格显示 (以前宫格显示很麻烦,现在一条命令就好了)
效果图
线性布局
线性宫格布局
总结
int 转化为 String
TextView
有setText(int resid)
方法,但是这儿 int
表示 resourceId
,如果我想把阅读次数(int 1123
)赋给这个 TextView
,不能使用这个方法。
|
|
Todo List
- Picasso 图片缓存库的学习
- 实现 RecyclerView 每个项各自的布局
源码地址(欢迎star) https://github.com/studychen/SeeNewsV2