1. List View Adapter
public class Adapter extends BaseAdapter {
private LayoutInflater myInflater;
private List<String> listData;
private int selectedItem = -1;
class Holder {
private TextView text;
private CheckBox checkBox;
}
public Adapter(Context context, List<String> listData) {
super();
myInflater = LayoutInflater.from(context);
this.listData = listData;
}
public void setSelectedItem(int selectedItem) {
this.selectedItem = selectedItem;
}
@Override
public int getCount(){
return listData.size();
}
@Override
public Object getItem(int position) {
return listData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final Holder holder;
if(convertView == null) {
holder = new Holder();
convertView = myInflater.inflate(R.layout.layout_of_each_item_in_list_view, null);
holder.text.findViewById(R.id.id_of_text_view);
holder.checkBox.findViewById(R.id.id_if_check_box);
convertView.setTag(holder);
}
else {
holder = (Holder) convertView.getTag();
}
holder.text.setText(listData.get(position));
// 按钮监听
holder.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton checkBox, boolean isChecked) {
if(checkBox.isChecked()) {
Toast.makeText(context, "CheckBox is checked", Toast.LENGTH_SHORT).show();
}
}
});
// 选中变色
if(position == selectedItem) {
convertView.setBackgroundColor(Color.parseColor("#EAEAEA"));
}
else {
convertView.setBackgroundColor(Color.TRANSPARENT);
}
return convertView;
}
}
2. List View点击事件
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
adapter.setSelectedItem(position);
adapter.notifyDataSetInvalidated();
}
});
3. List View布局
<ListView
android:id="@+id/id"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:cacheColorHint="@android:color/transparent"
android:divider="#000000"
android:dividerHeight="1dp"
android:fastScrollEnabled="true"
android:listSelector="@android:color/transparent" >
</ListView>
(1)其中,为了消除点击时出现的橘黄色背景,应该用:
android:listSelector="@android:color/transparent"
(2)若List View的背景是图片,为了防止滚动背景变黑,应该用:
android:cacheColorHint="@android:color/transparent"
(3)为了防止List View的点击时间被按钮覆盖,应该在按钮中加入:
android:focusable="false"
4. 选中改变颜色的另一种方法
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
View tag=(View)parent.getTag();
if (tag != null)
{
if (tag.getId()==id) return;
tag.setBackgroundColor(Color.RED);
}
view.setBackgroundColor(Color.TRANSPARENT);
parent.setTag(view);
}
});
5. SimpleAdapter的用法
private ListAdapter historyAdapter(List<PoiItem> list) {
ArrayList<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();
for(int i=list.size()-1; i>=0; i--) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("text", list.get(i).getText());
map.put("picture", R.drawable.go_btn);
data.add(map);
}
// R.id.id_of_text_view 和 R.id.id_of_image_view 都在 R.layout.layout_of_simple_adapter里
SimpleAdapter simpleAdapter = new SimpleAdapter(this, data, R.layout.layout_of_simple_adapter,
new String[]{"text", "picture"}, new int[]{R.id.id_of_text_view, R.id.id_of_image_view});
return simpleAdapter;
}