Android 5.0+ 解析(一)RecyclerView

1、配置

博客地址:http://blog.csdn.net/caihongdao123 

引用Support v7包:

dependencies { 
	compile fileTree(include: ['*.jar'], dir: 'libs') 
	compile 'com.android.support:recyclerview-v7:21.0.3'
	compile 'com.android.support:cardview-v7:21.0.3'
	compile 'com.android.support:palette-v7:22.2.0'
} 


2.RecyclerView简单介绍

1、RecyclerView也是一个继承ViewGroup的容器控件,用于在有限的界面视图情况下装载更多的内容。
2、RecyclerView虽然是容器控件,但是其布局显示基本都可以通过代码来控制显示,RecyclerView比一般容器控件更自由,用户更容易去定义它的内容显示方式。

recylerView.setLayoutManager(new LinearLayoutManager(context,LinearLayout.VERTICAL, true)); 
//设置添加删除item时候的动画 
recylerView.setItemAnimator(new DefaultItemAnimator());
setLayoutManager()方法参数解释

LayoutManager 布局管理参数类型可以有以下几种: 
①LinearLayoutManager:线性布局 

②GridLayoutManager:网格布局 

③StaggeredGridLayoutManager:流式布局 
LayoutManager的初始参数:
 
new LinearLayoutManager(this, LinearLayout.VERTICAL, true) 
第一个参数 :Context ,上下文参数,

    第二个参数:布局方向LinearLayout.VERTICAL垂直和LinearLayout.HORIZONTAL水平, 

第三个参数:为true表示是从Item底部数据开始显示,false就是正常从开头显示。 
setItemAnimator()
方法:

设置当前RecyclerView数据改变时(添加item或者删除item)整个布局的动画效果。在没有特殊需求下可以试用系统默认的动画。

new DefaultItemAnimator()


2 RecyclerView 适配器 

<span style="font-size:18px;">public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewHolder> {  
    private Context context; 
    private List<ModelBean> list;     
	private Resources res;  
    public RecyclerAdapter(Context context, List<ModelBean> list) {         
		this.context = context;         
		this.list = list; 
        res = context.getResources();     
	}  
    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
        View view = LayoutInflater.from(context).inflate(R.layout.item_card_view, parent,false); 
        return new MyViewHolder(view);     
	}  
    @Override 
    public void onBindViewHolder(final MyViewHolder holder, final int position) { 
        final ModelBean bean = list.get(position);
        holder.title.setText(bean.getTitle()); 
        holder.imageView.setImageResource(bean.getResId());
	}  
    @Override 
    public int getItemCount() { 
        return null == list ? 0 : list.size();
     }  
    public class MyViewHolder extends RecyclerView.ViewHolder {  
        private ImageView imageView;
        private TextView title;  
        public MyViewHolder(View view) {
	        super(view); 
            imageView = (ImageView) view.findViewById(R.id.pic);
	        title = (TextView) view.findViewById(R.id.name);
	    }
	 }
}</span>

打破传统ListView.Adapter的绑定数据方式,通过内部类MyViewHolder继承RecyclerView.ViewHolder封装容器中的ItemView,实现onCreateViewHolder抽象方法来加载ItemView的布局,实现onBindViewHolder抽象方法来绑定容器中的ItemView,进而进行赋值。



3 ItemView点击事件 

<span style="font-size:18px;">@Override 
public void onBindViewHolder(final MyViewHolder holder, final int position) {
	 final ModelBean bean = list.get(position);
	 holder.title.setText(bean.getTitle()); 
     holder.imageView.setImageResource(bean.getResId());
 
<span style="white-space:pre">	</span>/** 
  <span style="white-space:pre">	</span>* 调用接口回调
  <span style="white-space:pre">	</span>*/ 
<span style="white-space:pre">	</span>holder.itemView.setOnClickListener(new View.OnClickListener() {
	<span style="white-space:pre">	</span>@Override 
    <span style="white-space:pre">	</span>public void onClick(View v) {         
		 <span style="white-space:pre">	</span>if (null != listener) 
               listener.onItemClick(position, bean);       
		}     
	 });   
}   
/** 
 * 内部接口回调方法
 */ 
public interface OnItemClickListener { 
    void onItemClick(int position, Object object);
}  
/** 
 * 设置监听方法 
 * @param listener
 */ 
public void setOnItemClickListener(OnItemClickListener listener) {         
	this.listener = listener; 
}</span>


4 RecyclerView其他方法参考

1、notifyDataSetChanged()//更新所有数据类似ListView.notifyDataSetChanged()方法;
2、notifyItemInserted(int position)//在position位置插入数据的时候更新
3、notifyItemRemoved(int position)//移除postion位置的数据的时候更新
4、notifyItemChanged(int position)//当postion位置数据有改变时候更新 
5、notifyItemMoved(int fromPosition, int toPosition)//移除从位置formPosition到toPosition位置数据更新 
6、notifyItemRangeChanged(int positionStart, int itemCount)
7、notifyItemRangeInserted(int positionStart, int itemCount)

8、notifyItemRangeRemoved(int positionStart, int itemCount) 


欢迎留言和评论!

博客地址:http://blog.csdn.net/caihongdao123 

下一篇  Android 5.0+ 解析(二)CardView控件



  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值