我的android 第20天 - 自定义适配器
实现流程
7、自定义适配器
. 当想操作ItemView中子控件时需要自定义适配器
. 适配器常用API
. getCount:总共有多少数据,决定了getView中的position
. getView(int position, View convertView,
ViewGroup parent) : 每有一个Item进入视野范围内
就会调用,一般在这里初始化Item
. convertView : 可循环利用的ItemView
. parent : ItemView的父控件
. notifyDataSetChanged :刷新列表,重新初始化Item,
也就是重新调用getView
.LayoutInflater
convertView= getLayoutInflater().
inflate(R.layout.item_book, parent, false);
. @param root : 指定布局文件根节点的父控件
. @param attachToRoot :是否要将根节点添加到
private class BookAdapter extends SimpleAdapter {
public BookAdapter(Context context) {
super(context, data, R.layout.item_book,
new String[]{NAME},
new int[]{R.id.name});
}
public int getCount() {
return data==null ? 0 : data.size();
}
/**
* 每有Item进入视野范围内就会调用@param convertView : 可循环利用的ItemView
*/
public View getView(int position, View convertView, ViewGroup parent) {
/**
* @param root : 指定布局文件根节点的父控件 @param attachToRoot 是否要将根节点添加到parent 默认是true)
*/
View itemView = getLayoutInflater().inflate(R.layout.item_book, parent, false);
System.out.println(position + "-item-" +itemView);
System.out.println(position + "-convert-" +convertView);
// 取得当前Item对应的map数据
HashMap<String, Object> map = data.get(position);
String nameText = map.get(NAME).toString();
boolean goodLook = (Boolean) map.get(GOOG_LOOK);
// 设置书名
TextView nameView = (TextView) itemView.findViewById(R.id.name);
nameView.setText(nameText);
// 根据隐藏属性设置文字颜色
nameView.setTextColor(goodLook ? Color.RED : Color.YELLOW);
// 给CheckBox绑定监听
CheckBox checkBox = (CheckBox) itemView.findViewById(R.id.check);
checkBox.setOnCheckedChangeListener(MenusActivity1.this);
// checkBox.setTag(R.id.map, tag)
// 将map数据跟checkbox绑定在一起
checkBox.setTag(map);
return itemView;
}
8、删除列表项
. data.removeAll(selectedBooks) 移去已选的图书列表项
. selectedBooks.clear(); 清空选择图书的数组标记
. adapter.notifyDataSetChanged();刷新列表
9、对列表项标记好看、不好看
关注点
1、自定义适配器(getView、getCount)
2、上下文菜单
. onCreateContextMenu 创建
. onContextItemSelected 监听
3、选择菜单(在res\menu中设计选择菜单)
. groupId 组id
. itemId 菜单项id
. order 菜单排列顺序
. setIcon 菜单图标
/**
* 选择菜单:删除
*/
private void optionsMenuDelete() {
if (selectedBooks.isEmpty()) {
Toast.makeText(this, R.string.select_book, Toast.LENGTH_SHORT).show();
return;
}
// 移除checkBox选择的图书
data.removeAll(selectedBooks);
// 清空选中的图书的id
selectedBooks.clear();
// 刷新列表
adapter.notifyDataSetChanged();
}
/**
* 选择菜单:好看\不好看 */
private void optionsMenuGoodLookOrNot(int itemId) {
if (selectedBooks.isEmpty()) {
Toast.makeText(this, R.string.select_book, Toast.LENGTH_SHORT).show();
return;
}
for (HashMap<String, Object> map : selectedBooks) {
map.put(GOOG_LOOK, itemId == R.id.menu_good_look);
}
// 清除选中的图书的id
selectedBooks.clear();
// 刷新列表
adapter.notifyDataSetChanged();
}