【问题标题】:Listview from ArrayList class来自 ArrayList 类的列表视图
【发布时间】: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 的信息。

【问题讨论】:

    标签: android listview android-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_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);
    

    【讨论】:

      【解决方案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();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-08
        • 2019-07-13
        • 2023-03-26
        相关资源
        最近更新 更多