Hatena::ブログ(Diary)

ちょっとずつ、ちょっとずつ このページをアンテナに追加 RSSフィード

2009-03-15

AndroidでListView

| 20:29 | AndroidでListViewを含むブックマーク AndroidでListViewのブックマークコメント

基本的にレイアウト用のXMLを使わない方向で作る方針でやっています。

それでえらい苦労した。。。

XMLを使わない場合だと、自前でBaseAdapterクラス拡張して、getView()の中でList内の要素を生成しないといけないらしい

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

public class top extends Activity {



    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // レイアウトビューを作成
        LinearLayout linearLayout = new LinearLayout(this);
        // 垂直方向にViewを追加する
        linearLayout.setOrientation(LinearLayout.VERTICAL);
        // 親ビューとして配置する
        setContentView(linearLayout);

        // TextViewを作成
        TextView title = new TextView(this);
        // 文字を指定する
        title.setText("Hello World!");
        // 背景色をグレーに設定
        title.setBackgroundColor(Color.rgb(128, 128, 128));
        // TextViewの高さを40ピクセルに指定
        title.setHeight(40);
        // フォントサイズを20ピクセルに指定
        title.setTextSize(20.0f);
        // 上下左右で中央に指定する
        title.setGravity(Gravity.CENTER);
        // 親ビューにTextViewを子ビューとして配置する
        linearLayout.addView(title);

        // ListViewを作成する
        ListView list = new ListView(this);
        // ListViewにデータを設定する
        list.setAdapter(new TestAdapter(this));
        // ListViewをサブビューとしては貼付ける
        linearLayout.addView(list);

    }
    // BaseAdapterクラスを拡張して自前で作成する
    private class TestAdapter extends BaseAdapter{
    	private Context mContext;
    	private String[] data = {"Tokyo", "Osaka", "Nagoya", "Sapporo"};

        // コンストラクタ
		public TestAdapter(Context context) {
			mContext = context;
		}

                // データ数を返す
		public int getCount() {
			return data.length;
		}

                // dataの中身を返す
		public Object getItem(int position) {
			return data[position];
		}

                // ユニークIDを返す
		public long getItemId(int position) {
			return position;
		}

                // Listの中身を生成する
		public View getView(int position, View convertView, ViewGroup parent) {
			TextView tv;
			if(convertView == null){
				tv = new TextView(mContext);
			}else{
				tv = (TextView)convertView;
			}
			tv.setText(data[position]);
			return tv;
		}

    }
}

こんな風になった!

f:id:CLSmooth:20090315201508p:image

トラックバック - http://d.hatena.ne.jp/CLSmooth/20090315/1237116555