来自 ArrayList 类的列表视图

Posted

技术标签:

【中文标题】来自 ArrayList 类的列表视图【英文标题】:Listview from ArrayList class 【发布时间】:2020-10-02 14:51:30 【问题描述】:

我试图弄清楚如何将存储在单独类中的 ArrayList 的项目显示到 ListView 中。我整天都在查找它,但问题是我找不到像这样的东西,我在其中创建了一个不同的类来存储 ArrayList。这是我的实习任务,他们要求我使用本地数据库或对其进行硬编码,因此我选择对其进行硬编码。

import com.mircea.bookapp.Book;
import java.util.ArrayList;

public class Books

    private ArrayList<Book> booklist;

    public Books()
    
        booklist = new ArrayList<Book>();

        booklist.add(new Book("In Search of Lost Time", "Marcel Proust", 1913, "Modernist"));
        booklist.add(new Book("Ulysses", "James Joyce", 1922, "Modernist novel"));
        booklist.add(new Book("Don Quixote", "Miguel de Cervantes", 1612, "Novel"));
        booklist.add(new Book("The Great Gatsby", "F. Scott Fitzgerald", 1925, "Tragedy"));
        booklist.add(new Book("One Hundred Years Of Solitude", "Gabriel Garcia Marquez", 1967, "Magic realism"));
    

    public Book getBook(int index)
    
        return this.booklist.get(index);
    

这是类中的代码,我想从中获取 ListView 的信息。

【问题讨论】:

【参考方案1】:

在您的 MainActivity onCreate 方法中:

ArrayList<String> books = new ArrayList<>();
//here You have to load all books from Books class as a string to this array
ListView list = (ListView) findViewById(R.id.listView);
ArrayAdapter adapter = new ArrayAdapter(this, R.layout.list_item_layout, books);
list.setAdapter(adapter);

到资源/布局添加这个文件。 (这里可以修改ListView中的行样式)

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_
          android:layout_
          android:textSize="20sp"
          android:textColor="@color/colorPrimaryDark"
          android:textAlignment="center"
          android:gravity="center">
</TextView>

您也可以使用自定义样式,例如

ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, books);

【讨论】:

【参考方案2】:

您正在寻找的模式/UI 小部件称为 RecyclerView。这是显示项目列表的标准方式,因为它具有一些很好的性能优化,可以重复使用膨胀的布局。

d.android.com 有一个很好的指南,说明如何在此处实现您想要的:https://developer.android.com/guide/topics/ui/layout/recyclerview

实现的关键是适配器方法onBindViewHoldergetItemCount,它们将调用您的 Books 类以获取 Books 的总数并访问每个 Book 以将视图绑定到。从此示例修改:https://developer.android.com/guide/topics/ui/layout/recyclerview#Adapter

public class MyAdapter extends RecyclerView.Adapter<MyViewHolder> 
    private Books books;

    public MyAdapter(Books books) 
        this.books = books;
    

    @Override
    public MyViewHolder onCreateViewHolder(
        ViewGroup parent,
        int viewType
    ) 
        return new MyViewHolder(parent); // you need to implement this class!
    

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) 
        holder.bind(books.getBook(position));

    

    @Override
    public int getItemCount() 
        return books.getBookCount();
    

【讨论】:

以上是关于来自 ArrayList 类的列表视图的主要内容,如果未能解决你的问题,请参考以下文章

Java:没有来自外部类的 ArrayList 修改

如何在列表视图中显示来自arraylist的所有解析数据?

如何从 postgresql 视图表中获取要显示的对象列表

BaseAdapter 未更新列表视图中的数据

从视图表中获取数据时出现 Laravel 错误

来自 DAO 类的 JSTL foreach ArrayList 对象不起作用