来自 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
实现的关键是适配器方法onBindViewHolder
和getItemCount
,它们将调用您的 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 类的列表视图的主要内容,如果未能解决你的问题,请参考以下文章