列表视图从ArrayList类

问题描述 投票:0回答:2

我是个新手,我想知道如何将我存储在一个单独类中的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信息的代码。

android listview android-listview
2个回答
2
投票

在你的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);

1
投票

你要找的模式UI小部件叫做RecyclerView,它是标准的显示项目的方式,因为它有一些很好的性能优化来重新使用膨胀的布局。这是显示项目列表的标准方式,因为它有一些很好的性能优化,可以重复使用膨胀的布局。

d.android.com有一个很好的指南,告诉你如何实现你想要的东西。https:/developer.android.comguidetopicsuilayoutrecyclerview。

关键要实现的是适配器方法。onBindViewHoldergetItemCount 它将调用到您的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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.