标签:
RecyclerView是android 5.0 materials design中的一个组件,从名称上可以看出,它的作用 主要作用是复用问题。平常我们在listview中 也可以轻松的实现listview的复用问题。但是从目前的需求上来讲,listview的功能比较单一,实现一些比较特殊的效果或者加入动画都比较难,因此google推出这recyclerview不仅实现listview中复用问题,而且实现瀑布流,横着的条目,加入动画都比较容易实现。
1、添加依赖
首先我们要gradle的依赖库中添加 compile ‘com.android.support:recyclerview-v7:21.+’
2、在适配中代码
public class MyRecyclerViewAdapter extends RecyclerView.Adapter implements View.OnClickListener {
private Context context;
private ArrayList list;
private OnRecyclerViewItemClickListener mOnItemClickListener = null;
public interface OnRecyclerViewItemClickListener {
void onItemClick(View view , String data);
}
public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) {
this.mOnItemClickListener = listener;
}
public MyRecyclerViewAdapter(Context context, ArrayList list) {
this.context=context;
this.list=list;
}
@Override
public void onClick(View v) {
if (mOnItemClickListener != null) {
//注意这里使用getTag方法获取数据
mOnItemClickListener.onItemClick(v, (String) v.getTag());
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.item,null);
ViewHodler vh=new ViewHodler(view);
LinearLayout.LayoutParams lp = new LinearLayout.
LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
view.setLayoutParams(lp);
view.setOnClickListener(this);
return vh;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
ViewHodler mHodler = (ViewHodler) holder;
mHodler.textview.setText(list.get(position) + "");
mHodler.itemView.setTag(list.get(position));
}
@Override
public int getItemCount() {
Log.i("size",list.size()+"");
return list.size();
}
class ViewHodler extends RecyclerView.ViewHolder{
private TextView textview;
public ViewHodler(View itemView) {
super(itemView);
textview= (TextView) itemView.findViewById(R.id.textview);
// itemView.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// Toast.makeText(context,"click"+getPosition(),Toast.LENGTH_SHORT).show();
// }
// });
}
}
}
3、在activity中的配置
public class MainActivity extends Activity implements MyRecyclerViewAdapter.OnRecyclerViewItemClickListener {
private ArrayList list;
private RecyclerView mRecyclerView;
private LinearLayoutManager linearLayoutManager;
private MyRecyclerViewAdapter adapter;
private String tag;
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (android.support.v7.widget.Toolbar) findViewById(R.id.toolbar);
mRecyclerView= (RecyclerView) findViewById(R.id.recyerview);
list=new ArrayList();
linearLayoutManager=new LinearLayoutManager(this);
initData();
tag=getIntent().getStringExtra("list");
if(tag.equals("0")){
//设置普通列表
toolbar.setTitle("RecyclerViewList");
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(linearLayoutManager);
adapter=new MyRecyclerViewAdapter(this,list);
mRecyclerView.setAdapter(adapter);
adapter.setOnItemClickListener(this);
}else if(tag.equals("1")){
//设置横向列表
toolbar.setTitle("RecyclerViewList");
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
mRecyclerView.setLayoutManager(linearLayoutManager);
adapter=new MyRecyclerViewAdapter(this,list);
mRecyclerView.setAdapter(adapter);
}else if(tag.equals("2")){
//设置表格列表
toolbar.setTitle("RecyclerViewDemoGrid");
mRecyclerView.setLayoutManager(new GridLayoutManager(this,3));
adapter=new MyRecyclerViewAdapter(this,list);
mRecyclerView.setAdapter(adapter);
}
}
private void initData() {
for(int i=0;i<=30;i++){
list.add("this is item "+i);
}
}
@Override
public void onItemClick(View view, String data) {
Toast.makeText(MainActivity.this, "click item "+data, Toast.LENGTH_SHORT).show();
}
RecyclerView没有直接提供item的点击事件,像Listview的点击事件,我们可以直接设置item的点击事件。但recyclerview需要我们自已设置点击事件。
recyclerview的设计是比较炫酷的效果,轻松实现item的左右滑动,或者拖动之类。而且又在这基础上增加了许多动画效果。因此Recyclerview基本上是负责控件层的,把大部分将要实现的功能交给使用者自已去实现。
第一种方式,直接在ViewHolder中设置点击事件
class ViewHodler extends RecyclerView.ViewHolder{
private TextView textview;
public ViewHodler(View itemView) {
super(itemView);
textview= (TextView) itemView.findViewById(R.id.textview);
// itemView.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// Toast.makeText(context,"click"+getPosition(),Toast.LENGTH_SHORT).show();
// }
// });
}
}
第二种方式是设置监听事件,当点击的时候回调
第一步:定义接口,并声明
public interface OnRecyclerViewItemClickListener {
void onItemClick(View view , String data);
}
public void setOnItemClickListener(OnRecyclerViewItemClickListener listener) {
this.mOnItemClickListener = listener;
}
声明:
private OnRecyclerViewItemClickListener mOnItemClickListener = null;
第二步
在onBindViewHolder中设置Tag
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
ViewHodler mHodler = (ViewHodler) holder;
mHodler.textview.setText(list.get(position) + "");
mHodler.itemView.setTag(list.get(position));
}
第三步,在点击事件的时候回调
@Override
public void onClick(View v) {
if (mOnItemClickListener != null) {
//注意这里使用getTag方法获取数据
mOnItemClickListener.onItemClick(v, (String) v.getTag());
}
}
as demo下载地址http://download.csdn.net/detail/androidxiaogang/9513725
标签:
原文地址:http://blog.csdn.net/androidxiaogang/article/details/51344432