移动技术开发:RecyclerView瀑布流水果列表

1 实验名称

RecyclerView瀑布流水果列表

2 实验目的

掌握RecyclerView控件的实现方法和基本应用

3 实验源代码

布局文件代码:

activity_main:

java 复制代码
<?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">
    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

fruit_item:

java 复制代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <ImageView
        android:id="@+id/fruit_image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/fruit_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        />
</LinearLayout>

Java代码:

MainActivity .java:

java 复制代码
public class MainActivity extends AppCompatActivity {

    private List<Fruit> fruitLists = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化水果列表数据
        initFruits();
        //创建循环列表对象
        RecyclerView recycler_view = findViewById(R.id.recycler_view);
        //创建一个线性布局管理器对象
        //LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        //设置线性布局管理器的管理方向为水平管理
        //linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        //设置循环列表的布局管理器
        //创建一个3列垂直的瀑布流布局管理器对象
        StaggeredGridLayoutManager staggeredGridLayoutManager =
                new StaggeredGridLayoutManager(3,StaggeredGridLayoutManager.VERTICAL);
        recycler_view.setLayoutManager(staggeredGridLayoutManager);
        //创建列表数据适配器对象并把数据源关联上
        FruitAdapter fruitAdapter = new FruitAdapter(fruitLists);
        //让循环列表使用适配器对象
        recycler_view.setAdapter(fruitAdapter);
    }

    private void initFruits(){
        for (int i = 0; i < 2; i++) {
            Fruit apple = new Fruit(getRandomLengthName("Apple"), R.drawable.apple_pic);
            fruitLists.add(apple);
            Fruit banana = new Fruit(getRandomLengthName("Banana"), R.drawable.banana_pic);
            fruitLists.add(banana);
            Fruit orange = new Fruit(getRandomLengthName("Orange"), R.drawable.orange_pic);
            fruitLists.add(orange);
            Fruit watermelon = new Fruit(getRandomLengthName("Watermelon"), R.drawable.watermelon_pic);
            fruitLists.add(watermelon);
            Fruit pear = new Fruit(getRandomLengthName("Pear"), R.drawable.pear_pic);
            fruitLists.add(pear);
            Fruit grape = new Fruit(getRandomLengthName("Grape"), R.drawable.grape_pic);
            fruitLists.add(grape);
            Fruit pineapple = new Fruit(getRandomLengthName("Pineapple"), R.drawable.pineapple_pic);
            fruitLists.add(pineapple);
            Fruit strawberry = new Fruit(getRandomLengthName("Strawberry"), R.drawable.strawberry_pic);
            fruitLists.add(strawberry);
            Fruit cherry = new Fruit(getRandomLengthName("Cherry"), R.drawable.cherry_pic);
            fruitLists.add(cherry);
            Fruit mango = new Fruit(getRandomLengthName("Mango"), R.drawable.mango_pic);
            fruitLists.add(mango);
        }
    }

    private String getRandomLengthName(String name){
        Random random = new Random();
        int length = random.nextInt(20);
        StringBuilder stringBuilder = new StringBuilder();
        for(int i=0;i<length;i++){
            stringBuilder.append(name);
        }
        return stringBuilder.toString();
    }
}

FruitAdapter.java:

java 复制代码
public class FruitAdapter extends RecyclerView.Adapter<FruitAdapter.ViewHolder> {
    private List<Fruit> fruitLists = null;//子项水果数据源列表

    public FruitAdapter(List<Fruit> fruitLists) {
        this.fruitLists = fruitLists;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        //得到子项布局的视图
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.fruit_item,parent,false);
        ViewHolder viewHolder = new ViewHolder(itemView);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        Fruit fruit = fruitLists.get(position);//根据位置得到一个水果对象
        //将水果图片放到子项视图持有器的ImageView中
        holder.fruit_image.setImageResource(fruit.getImageId());
        //将水果名字放到子项视图持有器的TextView中
        holder.fruit_name.setText(fruit.getName());
    }

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

    //列表子项的视图持有器
    static class ViewHolder extends RecyclerView.ViewHolder{

        ImageView fruit_image;
        TextView fruit_name;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            fruit_image = itemView.findViewById(R.id.fruit_image);
            fruit_name = itemView.findViewById(R.id.fruit_name);
        }
    }
}

Fruit.java:

java 复制代码
//自定义数据源类
public class Fruit {

    private String name;
    private int imageId;//水果图片ID号

    public Fruit(String name, int imageId) {
        this.name = name;
        this.imageId = imageId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getImageId() {
        return imageId;
    }

    public void setImageId(int imageId) {
        this.imageId = imageId;
    }
}

4 实验运行结果图

5 实验总结

先写布局文件,两个布局文件,分别是activity_main.xml布局文件和fruit_item.xml布局文件。在activity_main.xml布局文件中,设置了一个瀑布流列表;而fruit_item.xml布局文件中在列表中插入图片和文本框。

写完布局文件开始写Java代码,初始化水果列表数据,创建循环列表对象,创建一个三列垂直的瀑布流布局管理器对象,创建列表数据适配器对象并把数据源关联上,让循环列表适用适配器对象,将水果图片和名字放到子项视图持有器中。

相关推荐
许彰午1 小时前
CacheSQL(二):主从复制——OpLog 环形缓冲区与故障自动恢复
java·数据库·缓存
liang_jy2 小时前
Android SparseArray
android·源码
liang_jy2 小时前
Activity 启动流程扩展篇(一)—— startActivityInner 任务决策全解析
android·源码
Bat U2 小时前
JavaEE|多线程初阶(七)
java·开发语言
NPE~3 小时前
[App逆向]脱壳实战
android·教程·逆向·android逆向·逆向分析
木易 士心4 小时前
别再只会用 drawCircle 了!一文搞懂 Android Canvas 底层机制
android
掌心向暖RPA自动化5 小时前
如何获取网页某个元素在屏幕可见部分的中心坐标影刀RPA懒加载坐标定位技巧
java·javascript·自动化·rpa·影刀rpa
AtOR CUES5 小时前
MySQL——表操作及查询
android·mysql·adb
日取其半万世不竭5 小时前
Minecraft Java版社区服务器搭建教程(Linux,适合新手)
java·linux·服务器
TeamDev6 小时前
JxBrowser 9.0.0 版本发布啦!
java·前端·混合应用·jxbrowser·浏览器控件·跨平台渲染·原声输入