ListView进阶版——RecycleView
RecycleView 是 Android 提供的一款更加强大的滚动控件
实现这种效果:
记录一下步骤:
- 首先,RecycleView需要引入
File- Project Struture
- 接下来创建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=".RecyclerViewTest">
<androidx.recyclerview.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/recycler_view"/>
</LinearLayout>
- 然后创建Adapter和实体
Adapter需要继承RecycleView.Adapter,然后重写ViewHolder以及构造方法
Adapter:
package com.example.helloactivity.Adapter;
import android.view.LayoutInflater;
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.example.helloactivity.Entity.Fruits;
import com.example.helloactivity.R;
import java.util.List;
public class RecyclerView_FruitAdapter extends RecyclerView.Adapter<RecyclerView_FruitAdapter.ViewHolder> {
//在这重写了ViewHolder
private List<Fruits> fruitsList;
static class ViewHolder extends RecyclerView.ViewHolder{
ImageView fruitImage;
TextView fruitName;
public ViewHolder(@NonNull View itemView) {
super(itemView);
fruitImage= itemView.findViewById(R.id.fruit_image);
fruitName=itemView.findViewById(R.id.fruit_id);
}
}
//这里重写了构造方法
public RecyclerView_FruitAdapter(List<Fruits> fruitsList){
this.fruitsList=fruitsList;
}
@NonNull
@Override
public RecyclerView_FruitAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.fruit_item,parent,false);
ViewHolder holder=new ViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerView_FruitAdapter.ViewHolder holder, int position) {
Fruits fruits=fruitsList.get(position);
holder.fruitName.setText(fruits.getName());
holder.fruitImage.setImageResource(fruits.getImageId());
}
@Override
public int getItemCount() {
return fruitsList.size();
}
}
Enitity:
package com.example.helloactivity.Entity;
public class Fruits {
private String name;
private int imageId;
public String getName() {
return name;
}
public int getImageId() {
return imageId;
}
public Fruits(String name, int imageId) {
this.name = name;
this.imageId = imageId;
}
}
AS快速生成get\set()的方法:
- 再写一下item的XML
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/fruit_image"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/fruit_id"
android:layout_marginLeft="10dp"
android:layout_gravity="center_horizontal"/>
</LinearLayout>
- 接下来就可以用了
package com.example.helloactivity;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.widget.LinearLayout;
import com.example.helloactivity.Adapter.RecyclerView_FruitAdapter;
import com.example.helloactivity.Entity.Fruits;
import java.util.ArrayList;
import java.util.List;
public class RecyclerViewTest extends AppCompatActivity {
private List<Fruits> fruitList=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_recycler_view_test);
initfruit();
RecyclerView recyclerView = findViewById(R.id.recycler_view);
LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
RecyclerView_FruitAdapter adapter=new RecyclerView_FruitAdapter(fruitList);
recyclerView.setAdapter(adapter);
}
private void initfruit(){
for(int i=0;i<2;i++){
Fruits apple=new Fruits("apple",R.drawable.apple);
fruitList.add(apple);
Fruits banana=new Fruits("banana",R.drawable.banana);
fruitList.add(banana);
Fruits orange=new Fruits("orange",R.drawable.orange);
fruitList.add(orange);
Fruits pear=new Fruits("pear",R.drawable.pear);
fruitList.add(pear);
Fruits grape=new Fruits("grape",R.drawable.grape);
fruitList.add(grape);
Fruits pineapple=new Fruits("pineapple",R.drawable.pineapple);
fruitList.add(pineapple);
}
}
}
搞定
利用RecycleView实现横向布局
实现这种能左右滑动的效果
在原有的代码中加入:
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
即可变为横向,此时我们还需要改变一下item的布局,让整体看起来更加美观(当然你不改也行)
Recycle的瀑布流布局
实现效果:
修改代码段:
StaggeredGridLayoutManager linearLayoutManager=new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);