Android RecycleView实现

1. 创建布局文件

 

复制代码
<?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">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
            android:id="@+id/btn_add"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="添加"
            android:textAllCaps="false"/>
        <Button
            android:id="@+id/btn_del"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="删除"
            android:textAllCaps="false"/>
        <Button
            android:id="@+id/btn_list"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="List"
            android:textAllCaps="false"/>
        <Button
            android:id="@+id/btn_grid"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Grid"
            android:textAllCaps="false"/>
        <Button
            android:id="@+id/btn_flow"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="flow"
            android:textAllCaps="false"/>
    </LinearLayout>

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



</LinearLayout>
复制代码

 




2. 实例化布局类,为按钮设置点击事件,以及数据集合
复制代码
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;

import com.atguigu.book.R;

import java.util.ArrayList;

public class RecycleViewActivity extends Activity implements View.OnClickListener {
    private Button btnAdd;
    private Button btnDel;
    private Button btnList;
    private Button btnGrid;
    private Button btnFlow;
    private RecyclerView recyclerView;

    private ArrayList<String> data;
    private MyRecycleViewAdapter adapter;

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

        initView();
        initData();



    }

    private void initData() {
        data = new ArrayList();
        for (int i = 0; i < 100; i++) {
            data.add("Content".concat(Integer.toString(i)));
        }
    }

    private void initView() {
        btnAdd = findViewById(R.id.btn_add);
        btnDel = findViewById(R.id.btn_del);
        btnList = findViewById(R.id.btn_list);
        btnGrid = findViewById(R.id.btn_grid);
        btnFlow = findViewById(R.id.btn_flow);
        recyclerView = findViewById(R.id.recycle_view);

        btnAdd.setOnClickListener(this);
        btnDel.setOnClickListener(this);
        btnList.setOnClickListener(this);
        btnGrid.setOnClickListener(this);
        btnFlow.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {

            case R.id.btn_add:
                adapter.addData(0,"newContent");
                recyclerView.scrollToPosition(0);
                break;
            case R.id.btn_del:
                adapter.removeData(0);
                recyclerView.scrollToPosition(0);
                break;
            case R.id.btn_list:
                recyclerView.setLayoutManager(new LinearLayoutManager(
                        RecycleViewActivity.this,
                        LinearLayoutManager.VERTICAL,
                        false
                ));
                break;
            case R.id.btn_grid:
                recyclerView.setLayoutManager(new GridLayoutManager(
                        RecycleViewActivity.this,
                        2,
                        GridLayoutManager.VERTICAL,
                        false
                ));
                break;
            case R.id.btn_flow:
                recyclerView.setLayoutManager(new StaggeredGridLayoutManager(
                        3,StaggeredGridLayoutManager.VERTICAL
                ));
                break;
        }
    }

}
复制代码

3. 准备适配器

复制代码
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.atguigu.book.R;

import java.util.ArrayList;

public class MyRecycleViewAdapter extends RecyclerView.Adapter<MyRecycleViewAdapter.MyViewHolder> {

    private final Context context;
    private ArrayList<String> data;

    public MyRecycleViewAdapter(Context context, ArrayList<String> data) {
        this.context = context;
        this.data = data;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View itemView = View.inflate(context, R.layout.item_recycleview,null);
        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        String data = this.data.get(position);
        holder.tvTittle.setText(data);
    }

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

    public void addData(int position, String data) {
        this.data.add(position, data);
        notifyItemInserted(position);
    }

    public void removeData(int position) {
        this.data.remove(position);
        notifyItemInserted(position);
    }

    class MyViewHolder extends RecyclerView.ViewHolder{
        private ImageView ivIcon;
        private TextView tvTittle;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            ivIcon = itemView.findViewById(R.id.iv_logo);
            tvTittle = itemView.findViewById(R.id.tv_title);
        }
    }
}
复制代码

4. 创建itemView布局文件

复制代码
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/white"
    android:padding="5dp">

    <LinearLayout
        android:gravity="center"
        android:padding="5dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#ACA5A5"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/iv_logo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/a" />

        <TextView
            android:layout_marginLeft="3dp"
            android:id="@+id/tv_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Content"
            android:textAllCaps="false"
            android:textColor="#000" />

    </LinearLayout>

</RelativeLayout>
复制代码

5. 主文件创建时实例化adapter属性

复制代码
        initView();
        initData();

        adapter = new MyRecycleViewAdapter(RecycleViewActivity.this,data);
        recyclerView.setAdapter(adapter);

        recyclerView.setLayoutManager(new LinearLayoutManager(
                RecycleViewActivity.this,
                LinearLayoutManager.VERTICAL,
                false
        ));
复制代码

 

posted @   AyaseYuiki  阅读(89)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示