Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

BaseAdapterを継承しよう

$
0
0

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です。


Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>