【Android基礎編】SimpleAdapterのgetViewを書き換えボタンクリック応答を実現
SimpleAdapterは4つのアダプタの中で最も重要なアダプタで、データのバインドを実現するだけでなく、コントロールをカスタマイズすることができます.コントロールをカスタマイズする場合、ボタン、チェックボックス、ラジオボックスなどのリスナーをクリックする必要があるコントロールを使用する場合は、SimpleAdapterのgetView関数を書き換えて実装する必要があります.getViewは、ListViewをリフレッシュするための関数で、ListViewにレコードを追加(新規表示)するたびにgetViewが呼び出されます(今回の呼び出しでは、getViewではこのレコードのボタンにリスナーを設定します).次に例を示します.これは書き換えられたクラスです.MySimpleAdapterです.context変数はToastクラスのmakeText関数を呼び出すためです.
上記のクラスのコードを使用します.
package com.plan;
import java.util.List;
import java.util.Map;
import android.content.Context;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import com.example.plan.R;
public class MySimpleAdapter extends SimpleAdapter{
Context context;
public MySimpleAdapter(Context context, List<? extends Map<String, ?>> data,
int resource, String[] from, int[] to) {
super(context, data, resource, from, to);
this.context = context;
// TODO Auto-generated constructor stub
}
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View v = super.getView(position, convertView, parent);
Button btn=(Button) v.findViewById(R.id.button1);
final int p = position;
Log.d("Position", Integer.toString(position));
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Toast.makeText(context, " "+Integer.toString(p),2000).show();
}
});
return v;
}
}
上記のクラスのコードを使用します.
plan_list = (ListView)findViewById(R.id.listView_today_plan);//
ListAdapter adapter = null;//
String[] time={"11:09","11:09","11:09"};
,"HelloWorld"};
boolean[] check = {true,false,false};
List<Map<String,Object>> listItems =
new ArrayList<Map<String,Object>>();
for(int i = 0; i < time.length;i++){
Map<String,Object> map = new HashMap<String,Object>();
map.put("time", time[i]);
map.put("item", item[i]);
map.put("check", check[i]);
listItems.add(map);
}
adapter = new MySimpleAdapter(this,listItems,
R.layout.plan_item,
new String[]{"time","item","check"},
new int[]{R.id.textView_time,R.id.textView_item,R.id.checkBox_complish});
plan_list.setAdapter(adapter);