ListView
1.1 ListView的Adapter继承的是BaseAdapter;
1.2 ListView的ViewHolder不是强制要写的, 只是不写的话导致的后果就是如果数据一多,可能会导致OOM或者界面卡顿;
1.3 ListView的分割线直接在布局中设置 divider
1.4 ListView的点击事件直接是setOnItemClickListenerRecyclerView
2.1 RecyclerView的Adapter继承的是RecyclerView.Adapter
2.2 RecyclerView的ViewHolder是必须要写的,是强制的,如果不写的话,就不能重写RecyclerView.Adapter中的3个方法 getItemCount()、onCreateViewHolder()、onBindViewHolder()分别表示 总共显示多少条目、创建ViewHolder、绑定数据;
2.3 RecyclerView在setAdapter之前一定要设置显示的样式,否则数据不能显示
new LinearLayoutManager(this) ; -> 表示ListView
new GridLayoutManager(this , 3) ; -> 表示GridView,3表示1列显示的个数
new StraggeredGridLayoutManager() ;
2.4 RecyclerView不支持直接在布局中添加分割线
2.5 RecyclerView不支持点击事件,只能用回调接口来设置点击事件
2.5.1 在adapter中写
// 利用接口 -> 给RecyclerView设置点击事件
private ItemClickListener mItemClickListener ;
public interface ItemClickListener{
public void onItemClick(int position) ;
}
public void setOnItemClickListener(ItemClickListener itemClickListener){
this.mItemClickListener = itemClickListener ;
}
2.5.2 在绑定数据的onBindViewHolder中给所有控件设置完点击事件后判断mItemClickListener不为空的话,设置点击事件,利用回调接口来设置点击事件
@Override
public void onBindViewHolder(CategoryListAdapter.ViewHolder holder, final int position) {
// 在这里取出 Activity中请求接口的list集合数据,然后给 item 中 每个子控件去设置数据
ChannelListResult.DataBean.
CategoriesBean.CategoryListBean item = mData.get(position) ;
Glide.with(mContext).load(item.getIcon_url()).into(holder.channel_icon) ;
// 名字
holder.channel_text.setText(item.getName());
// 内容
holder.channel_topic.setText(item.getIntro());
// 显示数据 因为最下边数据是:左边灰色,右边粉红色,所以这里使用html
String str = item.getSubscribe_count() + " 订阅 | " +
"总帖数 <font color='#FF678D'>" + item.getTotal_updates() + "</font>";
holder.channel_update_info.setText(Html.fromHtml(str));
// 点击事件一般都写在绑定数据这里,当然写到上边的创建布局时候也是可以的
if (mItemClickListener != null){
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 这里利用回调来给RecyclerView设置点击事件
mItemClickListener.onItemClick(position);
}
});
}
}