【android开发-13】android中RecycleView的详细用法介绍

1,RecycleView的基本用法

RecyclerView是Android中一个强大的可重用和可高度自定义的组件,常用于在Android应用中显示大量数据。以下是在Android中使用RecyclerView的基本步骤:

1,添加依赖:
在项目的build.gradle文件中添加对RecyclerView的依赖。

dependencies {  
    implementation 'com.android.support:recyclerview-v7:28.0.0' // 请根据您的项目版本选择合适的版本  
}

2,创建RecyclerView的布局:
创建一个RecyclerView的布局文件,例如activity_main.xml,并添加RecyclerView组件。

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

3,创建数据模型:
为RecyclerView中的数据创建一个数据模型类。例如,创建一个名为Person的类,包含姓名和年龄字段。

public class Person {  
    private String name;  
    private int age;  
  
    // 构造函数、getter和setter等...  
}

4,创建Adapter:
创建一个继承自RecyclerView.Adapter的Adapter类,用于连接数据和RecyclerView。Adapter需要定义一个包含数据的列表以及ViewHolder类的类型。

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {  
    private List<Person> persons;  
  
    public MyAdapter(List<Person> persons) {  
        this.persons = persons;  
    }  
  
    @NonNull  
    @Override  
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {  
        // 创建并返回ViewHolder实例...  
    }  
  
    @Override  
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {  
        // 将数据绑定到ViewHolder...  
    }  
  
    @Override  
    public int getItemCount() {  
        return persons.size();  
    }  
}

注意:MyAdapter 继承自RecyclerView.ViewHolder,那么必须重写onCreateViewHolder,onBindViewHolder和getItemCount这3个方法。而onBindViewHolder会在子项滚动到屏幕时执行。

5,创建ViewHolder:
在Adapter类中定义一个继承自RecyclerView.ViewHolder的ViewHolder类。ViewHolder类用于存储每个列表项的数据,并定义用于显示数据的视图组件。

public class ViewHolder extends RecyclerView.ViewHolder {  
    // 定义视图组件...  
}

以下是一个简单的Android RecyclerView用例参考代码:
首先,需要在布局文件中添加RecyclerView组件:

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

然后在Activity或Fragment中初始化RecyclerView并设置Adapter:

public class MainActivity extends AppCompatActivity {  
  
    private RecyclerView recyclerView;  
    private MyAdapter myAdapter;  
    private List<Person> persons;  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
  
        recyclerView = findViewById(R.id.recyclerView);  
        recyclerView.setLayoutManager(new LinearLayoutManager(this));  
  
        persons = new ArrayList<>();  
        persons.add(new Person("Alice", 25));  
        persons.add(new Person("Bob", 30));  
        persons.add(new Person("Charlie", 35));  
        persons.add(new Person("David", 40));  
        persons.add(new Person("Eve", 45));  
  
        myAdapter = new MyAdapter(persons);  
        recyclerView.setAdapter(myAdapter);  
    }  
}

其中,MyAdapter类的代码如下:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {  
    private List<Person> persons;  
  
    public MyAdapter(List<Person> persons) {  
        this.persons = persons;  
    }  
  
    @NonNull  
    @Override  
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {  
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_person, parent, false);  
        return new ViewHolder(view);  
    }  
  
    @Override  
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {  
        Person person = persons.get(position);  
        holder.nameTextView.setText(person.getName());  
        holder.ageTextView.setText(String.valueOf(person.getAge()));  
    }  
  
    @Override  
    public int getItemCount() {  
        return persons.size();  
    }  
  
    public class ViewHolder extends RecyclerView.ViewHolder {  
        TextView nameTextView;  
        TextView ageTextView;  
  
        ViewHolder(View itemView) {  
            super(itemView);  
            nameTextView = itemView.findViewById(R.id.nameTextView);  
            ageTextView = itemView.findViewById(R.id.ageTextView);  
        }  
    }  
}

LinearLayoutManager用于指定RecycleView的布局方式,是线性布局的意思,可以实现和ListView类似的效果。

2,RecycleView横向滚动效果
要在Android中实现RecyclerView的横向滚动效果,你需要使用LinearLayoutManager的横向布局,并设置RecyclerView的滚动方向为水平。以下是一个简单的示例:

public class MainActivity extends AppCompatActivity {  
  
    private RecyclerView recyclerView;  
    private MyAdapter myAdapter;  
    private List<String> items;  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
  
        recyclerView = findViewById(R.id.recyclerView);  
        recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));  
        recyclerView.setAdapter(myAdapter = new MyAdapter(items));  
  
        // 添加一些数据到列表中  
        items = new ArrayList<>();  
        items.add("Item 1");  
        items.add("Item 2");  
        items.add("Item 3");  
        items.add("Item 4");  
        items.add("Item 5");  
        myAdapter.notifyDataSetChanged();  
    }  
}

LinearLayoutManager默认是纵向排列的,我们构造是用LinearLayoutManager.HORIZONTAL表示然布局横向排列,这样RecycleView就可以横向滚动了。除了LinearLayoutManager外,RecycleView还提供GridLayoutManager实现网格布局,StaggerGridLayoutManager用于实现瀑布流布局。

3,RecycleView瀑布流布局
在Android中,您可以使用StaggerGridLayoutManager来创建一个交错网格布局,其中包含多列。以下是一个示例代码,展示如何使用StaggerGridLayoutManager设置多列:

// 创建一个StaggerGridLayoutManager实例  
StaggerGridLayoutManager layoutManager = new StaggerGridLayoutManager(3, StaggerGridLayoutManager.VERTICAL);  
  
// 将StaggerGridLayoutManager应用于RecyclerView  
RecyclerView recyclerView = findViewById(R.id.recycler_view);  
recyclerView.setLayoutManager(layoutManager);  
  
// 创建并设置Adapter  
MyAdapter adapter = new MyAdapter();  
recyclerView.setAdapter(adapter);

在上述代码中,StaggerGridLayoutManager的构造函数接受两个参数:列数和方向。在这个例子中,我们将列数设置为3,表示要创建三列。方向为StaggerGridLayoutManager.VERTICAL,表示垂直方向排列。

然后,将创建的StaggerGridLayoutManager实例应用于RecyclerView,通过调用setLayoutManager()方法。最后,创建并设置您自己的适配器,将其应用于RecyclerView,通过调用setAdapter()方法。

这样,您就可以使用StaggerGridLayoutManager在Android中创建一个包含多列的交错网格布局。

4,RecycleView点击事件
在Android中,使用RecyclerView时,可以通过在Adapter中设置点击事件来响应RecyclerView的点击事件。以下是一个示例代码,演示如何在Adapter中设置RecyclerView的点击事件:

首先,创建一个自定义的Adapter类,继承自RecyclerView.Adapter。在这个类中,我们需要重写一些方法,包括onCreateViewHolder、onBindViewHolder和getItemId等。

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {  
  
    private Context context;  
    private List<String> itemList;  
  
    public MyAdapter(Context context, List<String> itemList) {  
        this.context = context;  
        this.itemList = itemList;  
    }  
  
    @Override  
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {  
        View view = LayoutInflater.from(context).inflate(R.layout.item_layout, parent, false);  
        return new ViewHolder(view);  
    }  
  
    @Override  
    public void onBindViewHolder(MyAdapter.ViewHolder holder, int position) {  
        String item = itemList.get(position);  
        holder.textView.setText(item);  
    }  
  
    @Override  
    public int getItemCount() {  
        return itemList.size();  
    }  
  
    public class ViewHolder extends RecyclerView.ViewHolder {  
        TextView textView;  
        public ViewHolder(View itemView) {  
            super(itemView);  
            textView = itemView.findViewById(R.id.text_view);  
            itemView.setOnClickListener(new View.OnClickListener() {  
                @Override  
                public void onClick(View v) {  
                    // 处理点击事件  
                    int position = getAdapterPosition();  
                    String item = itemList.get(position);  
                    Toast.makeText(context, "点击了" + item, Toast.LENGTH_SHORT).show();  
                }  
            });  
        }  
    }  
}

在上述代码中,我们创建了一个自定义的Adapter类,并在ViewHolder中设置了点击事件。在onCreateViewHolder方法中,我们为每个itemView设置了一个点击事件监听器,并在onBindViewHolder方法中将数据与ViewHolder进行绑定。当点击某个item时,会触发相应的点击事件,并在控制台输出点击的item。您可以根据需要修改点击事件的处理方式。

4,RecycleView和ListView的优缺点
RecycleView:

优点:

支持多种布局,根据布局管理器。
高度自定义化的onClick事件,能够在viewHolder创建的时候为view设置监听器,通过view.setTag的方式,把dataList里面的值或者position传入view中绑定,再在监听器实现中,获取参数并回调相应的接口,并通过自定义的接口回传给外部的activity。
layoutManager的灵活使用,支持水平线性滑动,以及瀑布流形式。
ItemAnimator支持多种item添加以及删除动画,具有更好的交互效果。
缺点:

实现相较ListView会较复杂。
没有像ListView那样的空数据处理机制,需要自己编写。

ListView:

优点:

OnItemClickListener对item的点击事件能够很快响应,实现简单。
能够在xml中轻松定义divider。
有些特殊情况下,ListView的效率要比RecycleView高。
缺点:

item的动画、decoration与触摸交互实现起来困难。
不支持局部刷新,每次更新条目都要对每一个Item重新绘制,可能造成性能浪费。
对于添加头布局和脚布局,ListView的下标可能会混乱。
不支持镶套机制。
综上所述,选择使用RecycleView还是ListView主要取决于您的具体需求。

你可能感兴趣的:(android应用开发,android)