ListViewで、独自データのリストを表示する
最終更新日:2015-08-17
ListViewで、独自のレイアウトを使用するでAdapterを実装する方法を紹介したので、今回は次の図のような、1行が複数のデータで構成されているリストを表示してみましょう。
1行分のデータを表すクラスを作る
今回は名前とメールアドレスをもつContact
というクラスを作ります。
public class Contact {
private String mName;
private String mEmail;
public Contact(String name, String email) {
mName = name;
mEmail = email;
}
public String getName() {
return mName;
}
public String getEmail() {
return mEmail;
}
}
1行分のレイアウトを作成する
データをいれるためのTextViewを2つ用意します。
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
>
<TextView
android:id="@+id/text_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:textAppearanceLarge"/>
<TextView
android:id="@+id/text_email"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/text_name"
android:layout_marginTop="8dp"
android:textAppearance="?android:textAppearanceSmall"/>
</RelativeLayout>
Contact用のAdapterクラスを作る
これは、ListViewで、独自のレイアウトを使用するとほぼ同じです。Contact
のリストなので、ArrayAdapter<Contact>
を継承します。
public class ContactAdapter extends ArrayAdapter<Contact> {
private LayoutInflater mLayoutInflater;
public ContactAdapter(Context context) {
super(context, 0);
mLayoutInflater = LayoutInflater.from(context);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mLayoutInflater.inflate(R.layout.item_contact, null);
convertView.setTag(new ViewHolder(convertView));
}
ViewHolder holder = (ViewHolder) convertView.getTag();
Contact item = getItem(position);
holder.mNameText.setText(item.getName());
holder.mEmailText.setText(item.getEmail());
return convertView;
}
private static class ViewHolder {
TextView mNameText;
TextView mEmailText;
ViewHolder(View root) {
mNameText = (TextView) root.findViewById(R.id.text_name);
mEmailText = (TextView) root.findViewById(R.id.text_email);
}
}
}