ListViewにデータを表示するためにAdapterを使いますが、こいつを実装してみたいとおもいます。
とりあえず、前提として以下のようなクラスを画面に表示するとします。
package com.example.kazuki.myapplication.data; import android.provider.BaseColumns; /** * Created by Kazuki on 2014/08/09. */ public class LogItem { private long id; private String timestamp; private String message; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getTimestamp() { return timestamp; } public void setTimestamp(String timestamp) { this.timestamp = timestamp; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
このクラスを表示するためのレイアウトファイルを準備します。ここではlayout_log_item.xmlという名前で作りました。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge" android:text="Large Text" android:id="@+id/textView_message" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:text="Small Text" android:id="@+id/textView_timestamp" /> </LinearLayout>
Adapterクラスは、BaseAdapterクラスを継承して作ります。コンストラクタでLayoutInflater作るためのContextと、データのリストを受け取るようにしています。
package com.example.kazuki.myapplication; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.BaseAdapter; import android.widget.TextView; import com.example.kazuki.myapplication.data.LogItem; import java.util.List; /** * Created by Kazuki on 2014/08/09. */ public class LogItemAdapter extends BaseAdapter { private LayoutInflater inflater; private List<LogItem> items; public LogItemAdapter(Context context, List<LogItem> objects) { this.inflater = LayoutInflater.from(context); this.items = objects; } @Override public int getCount() { return this.items.size(); } @Override public Object getItem(int position) { return this.items.get(position); } @Override public long getItemId(int position) { return this.items.get(position).getId(); } @Override public View getView(int position, View convertView, ViewGroup parent) { LogItem item = this.items.get(position); if (convertView == null) { convertView = this.inflater.inflate(R.layout.layout_log_item, null); } TextView message = (TextView) convertView.findViewById(R.id.textView_message); TextView time = (TextView) convertView.findViewById(R.id.textView_timestamp); message.setText(item.getMessage()); time.setText(item.getTimestamp()); return convertView; } }
getCount, getItem, getItemIdは、抽象メソッドなのでさくっと実装しておきます。getViewでは、convertViewがnullのときは、inflaterを使ってViewを作ります。そして、データを必要な個所に設定していきます。めんどくさいですね。
使う時は、データとAdapterを用意して、ListViewとかにsetAdapterしてやればOKです。