一、 目标
- 掌握实现自定义适配器的方法
- 学会使用自定义适配器实现图文混搭列表
- 理解自定义适配器原理
- 学会使用Selector北京选择器
二、自定义Adapter
- 继承BaseAdapter
- 实现getView
- 关联ListView
代码
public class MyAdapter extends BaseAdapter {
/**
* 数据集和
*/
List<Map<String, Object>> list;
/**
* 布局反射器(布局文件反射未布局对象)
*/
LayoutInflater inflater;
/**
* 构造器
*/
public MyAdapter(Context context){
this.inflater = LayoutInflater.from(context);
}
/**
* 传入数据集合
*/
public void setList(List<Map<String, Object>> list){
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup viewGroup) {
View view = inflater.inflate(R.layout.item, null);
ImageView logo = view.findViewById(R.id.logo);
TextView title = view.findViewById(R.id.title);
TextView version = view.findViewById(R.id.version);
TextView size = view.findViewById(R.id.size);
Map<String, Object> map = list.get(position);
logo.setImageResource((Integer)map.get("logo"));
title.setText((String)map.get("title"));
title.setText((String)map.get("title"));
size.setText((String)map.get("size"));
return view;
}
}
调用
// 自定义Adapter
MyAdapter myAdapter = new MyAdapter(this);
myAdapter.setList(list);
三、ListView点击事件
名称 | 说明 |
---|
onItemClick | Item项点击事件 |
onItemLongClick | Item项长按事件 |
在onCreate中:
lv.setOnItemClickListener(this);
lv.setOnItemLongClickListener(this);
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
Toast.makeText(this, "点击"+position, Toast.LENGTH_SHORT).show();
}
@Override
public boolean onItemLongClick(AdapterView<?> adapterView, View view, int position, long l) {
Toast.makeText(this, "长按"+position, Toast.LENGTH_SHORT);
return true;
}
四、事件的消化
名称 | 说明 |
---|
true | 表示消化掉事件,事件不会再继续传递 |
false | 表示事件不消化,继续往下传递 |
五、选中背景切换的问题
问题:
- Item项选中后的背景颜色是否可以自定义?
- Button按钮点击后的背景图是否可以自定义?
答案(用Selector背景选择器实现以上效果)
六、Selector背景选择器
- 是drawable文件夹下的一种资源文件(.xml)
- 在其中可以定义多种不同状态下的控件背景
- 常用的状态如下表所示
名称 | 说明 |
---|
android:state_pressed | 控件是否被按压 |
android:state_focus | 控件是否获得焦点 |
android:state_selected | 空间是否被选中 |
android:state_enabled | 控件是否可用 |
总结
- 自定义适配器是应用最广的适配器,需要继承BaseAdapter,并重写方法
- 自定义适配器的核心方法是getView(),在该方法中通过LayoutInflater反射出行布局对象,并填充上数据内容
- ListView最重要的时间是item的点击事件和长按事件,同一时间内如果只想触发一个事件,可以再长安处理的最后返回true。
- 在android中,可以通过Selector来实现控件背景的自动切换。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。