ListView への POJO リストの表示

「ListView の基本的な使い方」 では String の List を ListView に関連付けました。

この場合では ArrayAdapter で非常に簡単にリスト表示されたのですが、 一般的な POJO (Plain Old Java Object) のリストはどのように扱われるでしょうか?

先に結論を言ってしまうと、 POJO も ArrayAdapter と android.R.layout.simple_list_item_1 で表示可能。 ただし toString メソッドをオーバーライドしておき表示させたい文字を指定する必要あり、ということになります。

POJO リストの結びつけ

「ListView の基本的な使い方」 では String の List を ListView に関連付けました。

実際のプログラムでは POJO としてデータを扱う場合は少なくありません。 POJO リストを持っていたときに、それを ListView に関連付けするにはどうしたらよいでしょうか。

ちなみに、 POJO というのは平たく言えば特別なものではない普通のユーザー定義の Java オブジェクトと考えて読んでください。

ここでは具体的に本を表す Book クラスを定義して、それのリストを構築。そしてそれを ListView で表示しましょう。

Book.java は次のように定義しました。 toString を実装していることに注意してください。

package com.keicode.android.test;

public class Book {
  
  String title;
  String isbn;
  String author;
  
  public Book(String title, String isbn, String author){
    this.title = title;
    this.isbn = isbn;
    this.author = author;
  }
  
  public String getTitle(){
    return title;
  }
  
  public String getISBN(){
    return isbn;
  }
  
  public String getAuthor(){
    return author;
  }
  
  public String toString(){
    return title + " - " + author;
  }
}

こうすることで、次のように 以前の記事と同様のコードで ListView と android.R.layout.simple_item_list_1 を用いて表示できました。

Android ListView

念のためコード全体を示します。「ListView の基本的な使い方」 でみたコードの String が Book に変わっただけです。

package com.keicode.android.test;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

public class ListViewTest2 extends Activity 
    implements OnClickListener {
  
  static final String TAG = "ListViewTest";
  
  ListView listView;
  Button addButton;
  static List<Book> dataList = new ArrayList<Book>();
  static ArrayAdapter<Book> adapter;
  
  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        findViews();
        setListeners();
        setAdapters();
    }
  
  protected void findViews(){
    listView = (ListView)findViewById(R.id.listView1);
    addButton = (Button)findViewById(R.id.button1);
  }
  
  protected void setListeners(){
    addButton.setOnClickListener(this);
  }

  @Override
  public void onClick(View v) {
    switch(v.getId()){
    case R.id.button1:
      addItem();
      break;
    }
  }
  
  protected void setAdapters(){
    adapter = new ArrayAdapter<Book>(
      this, 
      android.R.layout.simple_list_item_1, 
      dataList);
    listView.setAdapter(adapter);
  }
  
  protected void addItem(){
    adapter.add(new Book(
      "The Immortal Life of Henrietta Lacks", 
      "1400052173", 
      "Rebecca Skloot"));
  }
}

これで String と一般的なオブジェクトのコレクションを ListView に表示する方法が確認できました。

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 Android 開発入門