サンプルや、デバッグ用コードを書いていると、結構、何回も同じようなことを書いている。
時間がもったいないので、以下のような List Adapter を用意すると時間が節約できる。
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
/**
* ActivityListAdapter
*/
public final class ActivityListAdapter extends BaseAdapter{
Context context;
LayoutInflater layoutInflater;
int rowId;
int titleId;
private List<Element> list;
/**
* @param context Context
* @param rowId 1行分のレイアウトID
* @param titleId 1行表示(タイトル)のID
* @param builder ActivityListAdapter.Builder リスト生成
*/
public ActivityListAdapter(Context context,int rowId,int titleId,ActivityListAdapter.Builder builder){
this.context = context;
this.rowId = rowId;
this.titleId = titleId;
this.list = builder.mylist;
layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public static class Builder{
List<Element> mylist;
public Builder(){
mylist = new ArrayList<ActivityListAdapter.Element>();
}
public Builder add(String desc,Class<? extends Activity> cls){
mylist.add(new Element(desc,cls));
return this;
}
}
static class Element{
String desc;
Class<? extends Activity> cls;
Element(String desc,Class<? extends Activity> cls){
this.desc = desc;
this.cls = cls;
}
}
/* @see android.widget.Adapter#getView(int, android.view.View, android.view.ViewGroup) */
@Override
public View getView(int position,View convertView,ViewGroup parent){
View view = convertView==null ? layoutInflater.inflate(rowId,null) : convertView;
final Element item = list.get(position);
if (item != null){
*1.setText(item.desc);
view.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
context.startActivity(new Intent(context,item.cls));
}
});
}
return view;
}
/* @see android.widget.Adapter#getItem(int) */
@Override
public Object getItem(int position){
return list.get(position);
}
/* @see android.widget.Adapter#getItemId(int) */
@Override
public long getItemId(int position){
return position;
}
/* @see android.widget.Adapter#getCount() */
@Override
public int getCount(){
return list.size();
}
}
これを使うのは、簡単で、、、
ActivityListAdapter.Builder 生成して、リストの順にタイトルと Activityクラスを追加していく。
この ActivityListAdapter.Builder を、ActivityListAdapterのコンストラクタで指定して、
ListView の Adapter としてセットするだけ。
ActivityListAdapter.Builder builder = new ActivityListAdapter.Builder();
builder.add("Aの起動",Aactivity.class);
builder.add("Bの起動",Bactivity.class);
builder.add("Cの起動",Cactivity.class);
ListView listView = (ListView)findViewById(R.id.listView);
listView.setAdapter(new ActivityListAdapter(this,android.R.layout.simple_list_item_1,android.R.id.text1,builder));
*1:TextView)view.findViewById(titleId