minimize

事業拡大のため、新しい仲間を募集しています。
→詳しくはこちら

AdapterView (ViewGroup の派生クラス)は、Adapter を使ってデータをバインドします。
百聞は一見にしかず。まずはやってみましょう。

ListView

最も一般的な AdapterView です。
Swing や SWT の List に相当します。

Adapter

まずは Adapter の方から作成しましょう。

public class SampleListAdapter extends BaseAdapter {

    private Context context;

    public SampleListAdapter(Context context) {
        super();
        this.context = context;
    }

    public int getCount() {
        return 10;
    }

    public Object getItem(int position) {
        return null;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View result = null;
        if (convertView == null) {
            TextView textView = new TextView(context);
            textView.setText("sample\n" + position);
            result = textView;
        } else {
            result = convertView;
        }
        return result;
    }
  
}

コンストラクタ

このように、コンストラクタには Context を渡します。
Context は、View や Activity などが持つインスタンスです。
これが無いと、View を作成することができません。

getCount()

リスト数を返します。

getItem()

今回はとりあえずダミーで返します。

geItemId()

アイテムに対応する ID を返します。今回は position と同じにします。
つまり、先頭のアイテムが0、以降、1、2、…となります。

getView()

ここで、アイテム毎の View を作成して返します。

position

今回作成すべきアイテムのインデックス(0~)が入っています。

convertView

現在のアイテムに割り当てられている View が入っています。

parent

親 ViewGroup が入っています。

戻り値

作成した View を戻り値に入れます。

実装

Activity.onCreate() の中で、以下を記述するだけです。

ListView view = (ListView)findViewById(R.id.ListView01);
view.setAdapter(new SampleListAdapter(this));

listview1.png
結果はこんな感じになります。

あと、Android API のバージョンにもよるのかもしれませんが
1行の TextView を使うと表示が少し変になります。

選択時の処理

Activity.onCreate() の中で setOnItemClickListener() メソッドを呼び出します。

view.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    public void onItemClick(AdapterView parent, View v, int position, long id) {
        showMessage("click " + id);
    }
});

こんな感じです。
id には、Adapter.getItemId() で返した値が入っています。