RecyclerView和CardView结合使用

  1. XML1:implementation ‘com.android.support:recyclerview-v7:28.0.0’
<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/card_recycerview">

</android.support.v7.widget.RecyclerView>
  1. XML2:implementation ‘com.android.support:cardview-v7:28.0.0’
<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_height="45dp"
    android:layout_width="match_parent"
    app:cardCornerRadius="10dp"
    android:layout_margin="4dp"
    android:id="@+id/card">

    <TextView
        android:id="@+id/card_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="left|center"
        android:layout_marginLeft="10dp"/>

</android.support.v7.widget.CardView>
  1. Adapter:
//3.添加<RVAdaper.RVHolde>
public class RVAdaper extends RecyclerView.Adapter<RVAdaper.RVHolder> {


    private List<String> RVfolder_name_list;
    private LayoutInflater RVinflater;

    public RVAdaper(Context context,List<String> folder_name_list){
    	//1.准备数据源和LayoutInflater布局填充器
        this.RVfolder_name_list=folder_name_list; 
        this.RVinflater=LayoutInflater.from(context);
    }

    @NonNull
    @Override
    public RVAdaper.RVHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    	//4.给ViewHolder找到当前布局,
        View view=RVinflater.inflate(R.layout.card1,viewGroup,false);
        return new RVHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull RVHolder viewHolder, int i) {
    	//5.上一步的RVHolder被此方法接到,取出数据源数据,setView
        viewHolder.card_text.setText(RVfolder_name_list.get(i));
    }


    @Override
    public int getItemCount() {
    	//6.
        return RVfolder_name_list.size();
    }
	
	//2.给控件绑定布局
    public class RVHolder extends RecyclerView.ViewHolder{
        private TextView card_text;

        public RVHolder(View itemView) {
            super(itemView);
            card_text=(TextView)itemView.findViewById(R.id.card_text);
        }
    }
}

  1. Activity中使用
    private RecyclerView recyclerView;
    private LinearLayoutManager linearLayoutManager;
    private RVAdaper rvAdaper;
    private List<String> floder_list;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        floder_list=new ArrayList<String>();
        floder_list.add("1");
        floder_list.add("2");
        recyclerView=(RecyclerView)findViewById(R.id.card_recycerview);
        linearLayoutManager = new LinearLayoutManager(this);
        //LayoutManager管理条目(item)的位置
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.setHasFixedSize(true);//如果RecyclerView的(item)数目不会改变,可以添加这句话改善性能
        rvAdaper=new RVAdaper(this,floder_list);
        recyclerView.setAdapter(rvAdaper);
    }
  1. Adapter添加点击事件
    添加接口
    在这里插入图片描述
//7.
public interface RVItemClickListener {
    public void onItemClick(View view,int postition);
    public void OnLongItemClick(View view,int position);
}

Adapter中

public class RVAdaper extends RecyclerView.Adapter<RVAdaper.RVHolder> {


    private List<String> RVfolder_name_list;
    private LayoutInflater RVinflater;
    private RVItemClickListener rvItemClickListener;   //8.	

    public RVAdaper(Context context,List<String> folder_name_list){
        this.RVfolder_name_list=folder_name_list;
        this.RVinflater=LayoutInflater.from(context);
    }

    @NonNull
    @Override
    public RVAdaper.RVHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
        View view=RVinflater.inflate(R.layout.card1,viewGroup,false);
        return new RVHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull final RVHolder viewHolder, int i) {
        viewHolder.card_text.setText(RVfolder_name_list.get(i));

		//10.设置监听
        if(rvItemClickListener!=null){
            viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    rvItemClickListener.onItemClick(viewHolder.itemView,viewHolder.getLayoutPosition());
                }
            });
            viewHolder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
                @Override
                public boolean onLongClick(View view) {
                    rvItemClickListener.OnLongItemClick(viewHolder.itemView,viewHolder.getLayoutPosition());
                    return false;
                }
            });
        }
        //10.设置监听
    }


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


    public class RVHolder extends RecyclerView.ViewHolder{
        private TextView card_text;

        public RVHolder(View itemView) {
            super(itemView);
            card_text=(TextView)itemView.findViewById(R.id.card_text);
        }
    }
    //9.
    public void setRvItemClickListener(RVItemClickListener rvItemClickListener){
        this.rvItemClickListener=rvItemClickListener;
    }
}

Activity中

		//11.添加监听
		rvAdaper=new RVAdaper(this,floder_list);
        rvAdaper.setRvItemClickListener(new RVItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {
                Toast.makeText(getApplicationContext(),floder_list.get(position),Toast.LENGTH_SHORT).show();
            }

            @Override
            public void OnLongItemClick(View view, int position) {
                Toast.makeText(getApplicationContext(),floder_list.get(position),Toast.LENGTH_SHORT).show();
            }
        });
        recyclerView.setAdapter(rvAdaper);
  1. CardView添加水波纹效果
    XML:CardView
android:focusable="true"
android:clickable="true"
android:foreground="?android:attr/selectableItemBackground"

(附加新建不同版本资源文件的步骤)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值