我是个新手,我想知道如何将我存储在一个单独类中的ArrayList的项目显示在一个列表视图中。我找了一整天,但问题是我找不到类似这样的东西,特别是我已经创建了一个不同的类来存储ArrayList。这是我在实习中接到的一个任务,他们要求我使用本地数据库或硬编码,所以我选择了硬编码。
package com.mircea.bookapp;
import java.util.ArrayList;
import com.mircea.bookapp.Book;
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信息的代码。
在你的MainActivity onCreate方法中,在resourceslayouts中添加这个文件。
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);
在resourceslayouts中添加这个文件: (在这里你可以修改ListView中的行样式)
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp"
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);
你要找的模式UI小部件叫做RecyclerView,它是标准的显示项目的方式,因为它有一些很好的性能优化来重新使用膨胀的布局。这是显示项目列表的标准方式,因为它有一些很好的性能优化,可以重复使用膨胀的布局。
d.android.com有一个很好的指南,告诉你如何实现你想要的东西。https:/developer.android.comguidetopicsuilayoutrecyclerview。
关键要实现的是适配器方法。onBindViewHolder
和 getItemCount
它将调用到您的Books类以获取图书的总数,并访问每个Books来绑定视图。从这个例子修改而来。https:/developer.android.comguidetopicsuilayoutrecyclerview#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();
}
}