2012.02.15

【Android SDK】独自のListViewの作り方

いつも作り方を忘れてしまうのでまとめておく。

概要

おおまかな作成手順はこんな感じになる。

1. データを保存しておくクラスの作成
2. 1行の表示レイアウトの作成
3. BaseAdapterクラスを継承した表示に使う
4. リストビューへ必要なデータを登録

1. データを保存しておくクラスの作成

このクラスが1行に使うデータになる。
表示するものにgetterをつけたり、その他必要なものを作る。

選択されたらこのデータが受け取れるのでそのときに必要な
データをまとめておくとよい。

2. 1行の表示レイアウトの作成

レイアウトエディタ(?)や内部プログラムで1行で表示するレイアウトを作成する。

3. BaseAdapterクラスを継承した表示に使う

BaseAdapterを継承したクラスを新規作成。
Link:BaseAdapter | Android Developers

1.で作ったクラスをArrayListなどの配列でもてるようにして標準のgetterに乗せる。

/** データの入ったリスト */
private	List<FileListInfo>	m_fileList;

/**
 * 表示する個数を取得
 */
@Override
public int getCount()
{
	return	m_fileList.size();
}

/**
 * 選択された場所のデータを返す
 */
@Override
public Object getItem( int nIndex )
{
	return	m_fileList.get( nIndex );
}

/**
 * アイテムのIDを返す。
 * そのままIDを返せばオリジナルっぽくなる
 */
@Override
public long getItemId( int nIndex )
{
	return	nIndex;
}

重要なのがgetViewメソッドになる。

/**
 * 表示に使うViewを返却する。
 */
@Override
public View getView( int nIndex, View view, ViewGroup parent )
{
	//初回はないらしい
	if( view == null )
	{
		//レイアウトをロード
		LayoutInflater inflater = LayoutInflater.from( m_context );
		view = inflater.inflate( R.layout.file_list_row, null );
	}
	
	//nIndexを表示するようにする。
	FileListInfo	fli;
	fli = m_fileList.get( nIndex );
	
	//このへんでviewへデータの設定をする
	
	//表示に使うViewを返却する
	return view;
}
4. リストビューへ必要なデータを登録

こんな感じでListViewへデータをつなぐ。

//1.で作ったファイルリストの配列を作成
m_fileList = new ArrayList<FileListInfo>();

//3.で作ったアダプタを作成
m_fileListAdapter = new FileListAdapter( m_context );

//アダプタにデータを設定
m_fileListAdapter.setFileList( m_fileList );

//ListViewを作成し表示データを登録
m_lvFile = new ListView( m_context );
m_lvFile.setAdapter( m_fileListAdapter );

これを表示Viewへ登録すれば表示される。

その他Tips

・クリックイベントを取得する
OnItemClickListenerインターフェイスでクリック時のイベントを取得することが出来る。
ListViewへsetOnItemClickListenerメソッドを使って登録する。

・データの更新を行なう
データ的には1.で作ったファイルリストへリストへ登録すればいいのだが
表示データがうまく更新されない。

ListViewのデータ更新通知は BaseAdapter.notifyDataSetChanged()で行なう必要があります。
普通のウインドウの更新では変更できないようなので注意です。

・いろんなデータをListViewに入れる
上記の BaseAdapter.getView() の戻り値が実際に表示に使われるViewになる。
なのでデータにどのViewを使うかを決めておいてそのViewを戻すことで
各行のレイアウトを変更するとこが出来ます。

・セパレータをおきたい
いろんなレイアウトを置くと選択できない列を作成したいときがある。

そんなときにはBaseAdapter.isEnabledメソッドをオーバーライドして
選択したい列のみtrueを返すようにすると選択イベントが起きなくなる。


だいぶ投げやりだけど、これだけ書いておけば後で見直したときに理解できるでしょう。

Android NDKネイティブプログラミング Android NDKネイティブプログラミング
出村 成和

秀和システム 2011-07
売り上げランキング : 28613

Amazonで詳しく見る by G-Tools

ニャッキ格闘列伝 > プログラム >

前の記事:
次の記事:

関連記事

コメントリスト

コメントなし

コメント



*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

こんなタグが使えるみたいよ:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>