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; } } }
こんな風になった!