在support-v7中,我们可以使用RecyclerView来代替ListView,用于承载数据项。
RecyclerView使用起来方便灵巧而且效率比较高,首先我们定义一个RecyclerView对象,然后设置布局和适配器
注意:RecyclerView并没有提供点击事件的方法,所以我们需要手动添加
·MainActivity
public class MainActivity extends AppCompatActivity {
private RecyclerView rv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
rv = new RecyclerView(this);
setContentView(rv);
rv.setLayoutManager(new LinearLayoutManager(this)); //设置RecyclerView的布局样式,这里使用线性布局
MyAdapter myAdapter = new MyAdapter();
myAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() { //使用回调接口来设置点击的监听事件
@Override
public void itemClick(View view, int position) {
Toast.makeText(MainActivity.this, "点击第" + position + "项", Toast.LENGTH_SHORT).show();
}
});
rv.setAdapter(myAdapter); //设置适配器
}
}
适配器MyAdapter
public class MyAdapter extends RecyclerView.Adapter{ //继承RecyclerView.Adapter
private Info info[] = new Info[]{new Info("zhangsan",12),new Info("lisi",16)}; //自定义数据类型(代码就不给了,简单)
private class viewHolderSelf extends RecyclerView.ViewHolder{ //自定义一个类,在onCreateViewHolder中使用
private TextView tvUserName;
private TextView tvUserAge;
public viewHolderSelf(View itemView) { //itemView是由onCreateViewHolder初始化的View
super(itemView);
tvUserName= (TextView) itemView.findViewById(R.id.tvUserName); //使用itemView获取控件
tvUserAge= (TextView) itemView.findViewById(R.id.tvUserAge);
}
public TextView getTvUserName() {
return tvUserName;
}
public TextView getTvUserAge() {
return tvUserAge;
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
//使用布局解释器来解析自定义的列表项布局
return new viewHolderSelf(LayoutInflater.from(parent.getContext()).inflate(R.layout.item,null));
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
viewHolderSelf vhs = (viewHolderSelf) holder;
vhs.getTvUserName().setText(info[position].userName);
vhs.getTvUserAge().setText((info[position].userAge)+"");
if (mOnItemClickListener != null){ //判断是否为空,不为空就说明产生了点击事件
vhs.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOnItemClickListener.itemClick(vhs.itemView , vhs.getLayoutPosition()); //通过接口回调把相应的View传出去
}
});
}
}
@Override
public int getItemCount() { //获取数据长度
return info.length;
}
//点击事件的回调接口
public interface OnItemClickListener{
void itemClick(View view,int position);
}
private OnItemClickListener mOnItemClickListener;
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
mOnItemClickListener = onItemClickListener;
}
}
列表项布局item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/tvUserName"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/tvUserAge"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
以上便是RecyclerView的大概讲解,包括列表项布局、数据的加载以及点击事件的处理,如果你想更详细的理解,你可以去鸿洋大神的博客看看http://blog.csdn.net/lmj623565791/article/details/45059587,他说的比较详细