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 を用いて表示できました。
念のためコード全体を示します。「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 に表示する方法が確認できました。