我的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();
}
相关推荐
Android自定义适配器
Android程序源码--适配器,Android程序源码--适配器
自定义适配器 配合listView使用 ,将数据展示在列表中 进阶3
Android开发---适配器 简单代码块
采用ListView控件加自定义适配器实现listview列表控件,代码简单,逻辑清楚,可扩展性强,并且解决了OOM,亲测绝对可以使用
自定义适配器学习小例子,参考学习!注重的不是例子,是掌握适配器的工作原理!
威佛设计的MDB-RS232适配器的功能是在PC和MDB接口的支付设备之间进行数据转发,同时做好硬件接口适配。文中对自动售货机研发用MDB-RS232适配器的PC上传和接收数据格式分析。让用户能够很容易使用串口工具通过MDB-...
基于自定义适配器的ExpandableListView源码.zip
Android自定义适配器,能够直接运行
NULL 博文链接:https://sunzone.iteye.com/blog/1998131
Android高级应用源码-listview 适配器 优化 重用.zip
Android实现自定义适配器的ExpandableListView示例,准备一级列表中显示的数据:2个一级列表,分别显示"group1"和"group2",准备第一个一级列表中的二级列表数据:两个二级列表,分别显示"childData1"和"childData2",...
上一篇文章介绍了ListFragment,其中的ListView并没有自定义适配器,实际上在实际开发中常会用到自定义适配器,是实现更复杂的列表数据展示。所以这篇文章增加了自定义适配器,来进行ListView数据的展示
Android程序研发源码Android 基于自定义适配器的ExpandableListView源码.zip
android中自定义适配器BaseAdapter
Android应用源码之基于自定义适配器的ExpandableListView.zip
安卓开发-android基于自定义适配器的ExpandableListView.zip.zip
Android 基于自定义适配器的ExpandableListView源码