Recyclerview的使用 是代替了Listview和Gridview

1.导包

compile 'com.android.support:recyclerview-v7:23.4.0'

这个主要代替了listview和GridView布局相当于是他们的升级版




2.主函数

public class MainActivity extends AppCompatActivity {
    private RecyclerView rv;
    private ArrayList<String> arr;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rv=(RecyclerView)findViewById(R.id.rv);
        arr=new ArrayList<>();
        for (int i = 0; i <10 ; i++) {
            arr.add("我是"+i);
        }
//        LinearLayoutManager sta = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
//        rv.setLayoutManager(sta);
        StaggeredGridLayoutManager st=new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);
        //设置固定大小
        rv.setHasFixedSize(true);
        rv.setLayoutManager(st);
        spq sp = new spq(arr, this, rv);
        rv.setAdapter(sp);
    }
}




3.适配器

RecyclerView.Adapter	可以托管数据集合,为每一项Item创建视图并且绑定数据
RecyclerView.ViewHolder	承载Item视图的子布局
RecyclerView.LayoutManager	负责Item视图的布局的显示管理
RecyclerView.ItemDecoration	给每一项Item视图添加子View,例如可以进行画分隔线之类的
RecyclerView.ItemAnimator	负责处理数据添加或者删除时候的动画效果


public class spq extends RecyclerView.Adapter<spq.ViewHolder> {
    private Context co;
    private ArrayList<String> arr;
    private RecyclerView rv;

    public spq(Context co, ArrayList<String> arr, RecyclerView rv) {
        this.co = co;
        this.arr = arr;
        this.rv = rv;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //想要item文字居中必须这样写
        View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.buju, parent, false);
        return new ViewHolder(inflate);
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
          holder.tv.setText(arr.get(position));
    }

    @Override
    public int getItemCount() {
        return arr.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        TextView tv;
        public ViewHolder(View itemView) {
            super(itemView);
            tv=itemView.findViewById(R.id.tv);
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    int childAdapterPosition = rv.getChildAdapterPosition(view);
                    Toast.makeText(co,arr.get(childAdapterPosition), Toast.LENGTH_SHORT).show();
                }
            });
        }
    }
}






4.主布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="comqq.example.hasee.myapplication.MainActivity"
    android:orientation="vertical">
    
    <android.support.v7.widget.RecyclerView
        android:id="@+id/rv"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </android.support.v7.widget.RecyclerView>
    
</LinearLayout>




5.item布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    
</LinearLayout>


//添加点击事件

步骤

1、在MyAdapter中定义接口

 
  1. public interface OnItemClickListener{
  2. void onItemClick(int position);
  3. }

2、声明这个接口变量

 
  1. private OnItemClickListener mItemClickListener;

3、在onCreateViewHolder()中为每个item添加点击事件

 
  1. @Override
  2. public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  3. View view = View.inflate(mContext, R.layout.item_linear, null);
  4. RecyclerView.ViewHolder holder = new LinearViewholder(view);
  5. view.setOnClickListener(this);
  6. return holder;
  7. }
 
  1. @Override
  2. public void onClick(View v) {
  3. if (mItemClickListener!=null){
  4. mItemClickListener.onItemClick((Integer) v.getTag());
  5. }
  6. }

4、注意上面调用接口的onItemClick()中的v.getTag()方法,这需要在onBindViewHolder()方法中设置和item相关的数据

 
  1. @Override
  2. public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
  3. LinearViewholder viewholder = (LinearViewholder) holder;
  4. viewholder.mTextView.setText(mList.get(position));
  5. viewholder.itemView.setTag(position);
  6. }

5、提供set方法

 
  1. public void setItemClickListener(OnItemClickListener itemClickListener) {
  2. mItemClickListener = itemClickListener;
  3. }

6、在MainActivity中

 
  1. MyRecyclerViewAdapter adapter = new MyRecyalerViewAdapter();
  2. adapter.setItemClickListener(this);
  3. @Override
  4. public void onItemClick(int position) {
  5. Toast.makeText(this, ""+position, Toast.LENGTH_SHORT).show();
  6. }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值