RecyclerView的基本用法 (一个控件实现ListView, GridView等效果)+接口回调点击事件

上图:



主xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="bawe.com.day_recyclerview_lianxi.MainActivity">

   <android.support.v7.widget.RecyclerView
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:id="@+id/recyclerview"
       ></android.support.v7.widget.RecyclerView>

   <

</android.support.constraint.ConstraintLayout>

MainActivity:

package bawe.com.day_recyclerview_lianxi;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.widget.Toast;

import java.util.ArrayList;

import static android.widget.LinearLayout.VERTICAL;

public class MainActivity extends AppCompatActivity {

    private ArrayList<User> list;
    private RecyclerView idrecy;
    private RecyclerViewDataAdpater dataAdpater;
    private int itemLong;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        idrecy = (RecyclerView) findViewById(R.id.recyclerview);

        list = new ArrayList<User>();
        //添加数据
        for(int i=0 ; i< 20; i++){

            User user = new User();

            user.setImg(R.mipmap.ic_launcher);
            user.setName("第"+i+"条数据");
            list.add(user);
        }

        //list集合的数量
        itemLong = list.size();
        //线性布局管理器     VERTICAL垂直 条目
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this,VERTICAL,false );

        //HORIZONTAL    横向 条目
//        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this,HORIZONTAL,false );

        //表格布局管理器    一行3列   VERTICAL垂直
//        GridLayoutManager gridLayoutManager = new GridLayoutManager(this,3 ,VERTICAL,false);
//        GridLayoutManager gridLayoutManager = new GridLayoutManager(this,3 , LinearLayoutManager.HORIZONTAL,false);

        //流式布局
//        StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2,VERTICAL );
        idrecy.setLayoutManager(linearLayoutManager);

        idrecy.addItemDecoration(new DividerItemDecoration(this,DividerItemDecoration.VERTICAL));
        //适配器
        dataAdpater = new RecyclerViewDataAdpater(this, list);
        //点击事件     调用接口方法
        dataAdpater.setOnRecyclerViewItemClickLintemet(new RecyclerViewDataAdpater.OnRecyclerViewItemClickLintemet() {
            @Override
            public void onItemClick(int position) {

                Toast.makeText(MainActivity.this,"这是第"+position+"条数据",Toast.LENGTH_SHORT).show();
            }
        });
        //长按事件    调用接口方法
        dataAdpater.setOnRecyclerViewLongClickLintement(new RecyclerViewDataAdpater.OnRecyclerViewLongClickLintement() {
            @Override
            public void onLongClick(int position) {
                Toast.makeText(MainActivity.this,"这是第"+position+"条数据",Toast.LENGTH_SHORT).show();
                list.remove(position);
                //list集合数量减减
                itemLong--;
                dataAdpater.notifyItemRemoved(position- itemLong);

            }
        });

        //设置适配器
        idrecy.setAdapter(dataAdpater);


    }
}


适配器类
RecyclerViewDataAdpater:

package bawe.com.day_recyclerview_lianxi;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by 迷人的脚毛!! on 2017/11/9.
 */

public class RecyclerViewDataAdpater extends RecyclerView.Adapter<RecyclerViewDataAdpater.ViewHolder>{

    //定义一个接口点击事件
    public interface OnRecyclerViewItemClickLintemet{
        void onItemClick(int position);
    }
    //定义接口对象         单击事件
    private OnRecyclerViewItemClickLintemet listener;
    //定义接口方法         单击事件
    public void setOnRecyclerViewItemClickLintemet(OnRecyclerViewItemClickLintemet listener){

        this.listener=listener;
    };
//================================================================================================
         //定义一个接口的长按事件
    public interface OnRecyclerViewLongClickLintement{
        void onLongClick(int position);
}
     //定义接口方法  长按事件
    private OnRecyclerViewLongClickLintement longistener;

    //定义接口方法    长按事件
    public void setOnRecyclerViewLongClickLintement(OnRecyclerViewLongClickLintement longistener){
        this.longistener=longistener;
    }
    //===================================================================================================
    //上下文对象
    private Context context;
    // List集合
    private List<User> list=new ArrayList<User>();

    public RecyclerViewDataAdpater(Context context, List<User> list) {
        this.context = context;
        this.list = list;
    }

    //创建ViewHolder的时候
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //查找布局xml
        View view = View.inflate(context, R.layout.recyclerview_layout, null);
        ViewHolder viewHolder = new ViewHolder(view);

        return viewHolder;
    }
     //绑定ViewHolder,实际上是把视图和数据进行绑定
    @Override
    public void onBindViewHolder(ViewHolder holder, final int position) {
        //条目单击事件
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                listener.onItemClick(position);
            }
        });
        //条目长按事件
        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                longistener.onLongClick(position);
                return false;
            }
        });

        //给控件赋值数据
        holder.img.setImageResource(list.get(position).getImg());
        holder.text.setText(list.get(position).getName());
    }

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

    //定义ViewHolder
    class ViewHolder extends RecyclerView.ViewHolder{

        private ImageView img;
        private TextView text;

        public ViewHolder(View itemView) {
            super(itemView);
            //查找控件
             img= (ImageView)itemView.findViewById(R.id.img_tu);
             text=(TextView)itemView.findViewById(R.id.tv_text);
        }
    }

}

依赖:
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'

  用接口回调的方法写了 Item的长按和短按的点击事件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值