2012.02.15
【Android SDK】独自のListViewの作り方
いつも作り方を忘れてしまうのでまとめておく。
おおまかな作成手順はこんな感じになる。
1. データを保存しておくクラスの作成 2. 1行の表示レイアウトの作成 3. BaseAdapterクラスを継承した表示に使う 4. リストビューへ必要なデータを登録
このクラスが1行に使うデータになる。
表示するものにgetterをつけたり、その他必要なものを作る。
選択されたらこのデータが受け取れるのでそのときに必要な
データをまとめておくとよい。
レイアウトエディタ(?)や内部プログラムで1行で表示するレイアウトを作成する。
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; }
こんな感じで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へ登録すれば表示される。
・クリックイベントを取得する
OnItemClickListenerインターフェイスでクリック時のイベントを取得することが出来る。
ListViewへsetOnItemClickListenerメソッドを使って登録する。
・データの更新を行なう
データ的には1.で作ったファイルリストへリストへ登録すればいいのだが
表示データがうまく更新されない。
ListViewのデータ更新通知は BaseAdapter.notifyDataSetChanged()で行なう必要があります。
普通のウインドウの更新では変更できないようなので注意です。
・いろんなデータをListViewに入れる
上記の BaseAdapter.getView() の戻り値が実際に表示に使われるViewになる。
なのでデータにどのViewを使うかを決めておいてそのViewを戻すことで
各行のレイアウトを変更するとこが出来ます。
・セパレータをおきたい
いろんなレイアウトを置くと選択できない列を作成したいときがある。
そんなときにはBaseAdapter.isEnabledメソッドをオーバーライドして
選択したい列のみtrueを返すようにすると選択イベントが起きなくなる。
だいぶ投げやりだけど、これだけ書いておけば後で見直したときに理解できるでしょう。
Android NDKネイティブプログラミング 出村 成和 秀和システム 2011-07 |
関連記事