ListViewにデータを表示するためにAdapterを使いますが、こいつを実装してみたいとおもいます。
とりあえず、前提として以下のようなクラスを画面に表示するとします。
package com.example.kazuki.myapplication.data; import android.provider.BaseColumns; /** * Created by Kazuki on 2014/08/09. */publicclass LogItem { privatelong id; private String timestamp; private String message; publiclong getId() { return id; } publicvoid setId(long id) { this.id = id; } public String getTimestamp() { return timestamp; } publicvoid setTimestamp(String timestamp) { this.timestamp = timestamp; } public String getMessage() { return message; } publicvoid 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"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textAppearance="?android:attr/textAppearanceLarge"android:text="Large Text"android:id="@+id/textView_message" /><TextViewandroid: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. */publicclass 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; } @Overridepublicint getCount() { returnthis.items.size(); } @Overridepublic Object getItem(int position) { returnthis.items.get(position); } @Overridepubliclong getItemId(int position) { returnthis.items.get(position).getId(); } @Overridepublic 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です。