RecyclerView的使用

1.首先在app中的build.gradle添加

//有些人不需要添加也可以用
implementation 'androidx.recyclerview:recyclerview:1.0.0'

XML


1.activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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=".MainActivity"
    android:orientation="vertical"
    >
    <Button
        android:id="@+id/bnt1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="添加数据"
        android:onClick="onClick"
        />
    <Button
        android:id="@+id/bnt2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="切换布局"
        android:onClick="onClick"
        />
    <Button
        android:id="@+id/bnt3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="插入数据"
        android:onClick="onClick"
        />
    <Button
        android:id="@+id/bnt4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="删除数据"
        android:onClick="onClick"
        />
    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/recycler_view"
        >

    </androidx.recyclerview.widget.RecyclerView>
</LinearLayout>

2.item_layout.xml

<?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="wrap_content"
    android:orientation="horizontal"
    android:background="#A4D3EE"
    android:layout_margin="4dp">

    <ImageView
        android:id="@+id/iv"
        android:layout_width="88dp"
        android:layout_height="88dp"
        android:scaleType="fitXY"/>

    <TextView
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textSize="22sp"
        android:textColor="#fff"
        android:gravity="center_vertical"
        android:layout_marginLeft="8dp"/>

</LinearLayout>

主代码


1.RecyAdapter适配器

  • 1.继承RecyclerView.Adapter
  • 2.绑定ViewHolder
  • 3.实现Adapter的相关方法
public class RecyAdapter extends RecyclerView.Adapter<RecyAdapter.MyViewHolder> {
    private Context mcontext;
    private List<String> dataSource;
    private RecyclerView mRyw;
    private OnItemList onItemList;
    private int addDataPosition = -1;

    //重写
    public RecyAdapter(Context context,RecyclerView recyclerView){
        this.mcontext = context;
        this.dataSource = new ArrayList<>();
        this.mRyw = recyclerView;
    }
    //set方法
    public void setDataSource(List<String> dataSource){
        this.dataSource = dataSource;
        notifyDataSetChanged();
    }
    public void setOnItemList(OnItemList onItemList) {
        this.onItemList = onItemList;
    }

    @NonNull
    @Override
    //创建并且返回ViewHolder
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new MyViewHolder(LayoutInflater.from(mcontext).inflate(R.layout.item_layout,parent,false));

    }
     //接收MyViewHolder实例,通过ViewHolder绑定数据
    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, final int position) {
        holder.mimg.setImageResource(getImg(position));

        holder.mtxt.setText(dataSource.get(position));

        //瀑布流使用随机高度
        if (mRyw.getLayoutManager().getClass() == StaggeredGridLayoutManager.class){
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                                               getRdmHeight());
         holder.mtxt.setLayoutParams(params);
        }else {
            //不是瀑布流
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                                                   ViewGroup.LayoutParams.WRAP_CONTENT);
            holder.mtxt.setLayoutParams(params);
        }
        //改变背景颜色
        if (addDataPosition == position){
            holder.mitemView.setBackgroundColor(Color.RED);
        }
        holder.mitemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //调用接口
                if (onItemList != null){
                    onItemList.OnTiemClick(position);
                }
            }
        });
    }

    @Override
    //返回数据数量
    public int getItemCount() {
        return dataSource.size();
    }
    //图片这里可以自己准备
    private int getImg (int img){
        switch (img % 5){
            case 0:
                return R.mipmap.a;
            case 1:
                return R.mipmap.b;
            case 2:
                return R.mipmap.c;
            case 3:
                return R.mipmap.d;
            case 4:
                return R.mipmap.e;
        }
        return 0;
    }

    private int getRdmHeight(){
        return (int)(Math.random () *1000);

    }
    //添加
    public void addData(int position){
        addDataPosition = position;
        dataSource.add(position,"插入数据");
        notifyItemInserted(position);
        notifyItemRangeChanged(position,dataSource.size() - position);
    }
    //删除
    public void removerData(int position){
        addDataPosition = -1;
        dataSource.remove(position);
        notifyItemInserted(position);
        notifyItemRangeChanged(position,dataSource.size() - position);
    }
    class MyViewHolder extends RecyclerView.ViewHolder {
        View mitemView;
        ImageView mimg;
        TextView mtxt;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            mimg = itemView.findViewById(R.id.iv);
            mtxt = itemView.findViewById(R.id.tv);
            mitemView = itemView;
        }
    }
    //接口
    public interface OnItemList{
        void OnTiemClick(int position);
    }

}

2.MainActivity

  • 1.初始化数据
  • 2.实例化适配器
  • 3.使用GridLayoutManager和LinearLayoutManager
public class MainActivity extends AppCompatActivity {
     private RecyclerView mrecyclerView;
     private RecyAdapter mrecyAdapter;
     private Button bnt1,bnt2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mrecyclerView = findViewById(R.id.recycler_view);
        //线性布局
        LinearLayoutManager layoutManager = new LinearLayoutManager(this);

        /*//横向排列
        layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        //把数据修改为反向展示
        layoutManager.setReverseLayout(true);*/


        mrecyclerView.setLayoutManager(layoutManager);
        mrecyAdapter = new RecyAdapter(this,mrecyclerView);
        mrecyclerView.setAdapter(mrecyAdapter);

        mrecyAdapter.setOnItemList(new RecyAdapter.OnItemList() {
            @Override
            public void OnTiemClick(int position) {
                Toast.makeText(getBaseContext(),"第"+position+"被点击",Toast.LENGTH_SHORT).show();
            }
        });

        mrecyclerView.setItemAnimator(new DefaultItemAnimator());
    }
    public void onClick(View v){
        switch (v.getId()){
            case R.id.bnt1:
                List<String> data = new ArrayList<>();
                for (int i=0;i<20;i++){
                    String s = "第" +i +"条数据";
                    data.add(s);
                }
                mrecyAdapter.setDataSource(data);
                break;
            case R.id.bnt2:
                //从线性布局切换到网格布局
                if (mrecyclerView.getLayoutManager().getClass() == LinearLayoutManager.class){
                    //切换网格
                    GridLayoutManager gridLayoutManager = new GridLayoutManager(this,2);
                    mrecyclerView.setLayoutManager(gridLayoutManager);
                }else if (mrecyclerView.getLayoutManager().getClass() == GridLayoutManager.class){
                    //切换为瀑布流
                    StaggeredGridLayoutManager Sgm = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.VERTICAL);
                    mrecyclerView.setLayoutManager(Sgm);
                }else {
                    //切换为线性布局
                    LinearLayoutManager Llm = new LinearLayoutManager(this);
                    mrecyclerView.setLayoutManager(Llm);
                }
                break;
                //添加
            case R.id.bnt3:
                mrecyAdapter.addData(1);
                break;
            case R.id.bnt4:
                mrecyAdapter.removerData(1);
                break;
        }
    }
}

成果


1.添加数据
在这里插入图片描述
2.切换布局
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值