AdapterView
来源:互联网 发布:软件测试工程师教程 编辑:程序博客网 时间:2024/05/18 04:56
1、AdapterView
View - 控件 - 用于批量显示数据。
Adapter - 适配器 - 将数据转换之后,提供给View显示。
2、ListView - 最简单的AdapterView
listView在布局中的id命名
- 标准的控件操作方式,定义android:id="@+id/listView",获取findViewById(R.id.listView)。
- 定义android:id="@android:id/list",act不能继承Activity了,而要继承ListActivity,然后获取this.getListView()。
3、ArrayAdapter - 最简单的Adapter,只能显示文本,不能显示图片等等。
ArrayAdapter<string> adapter = new ArrayAdapter<string> (this, android.R.layout.simple_list_item_1, dataArray)
- 参数:(1)当前act;(2)布局文件,使用系统自带资源包R,simple_list_item_1只有一个textView;(3)数据源,数组的数据类型是string,在act中赋好值。
4、View和Adapter关联起来,并设置响应事件:
设置Adapter - listView.setAdapter(adapter)
设置触摸响应 - listView.setOnItemClickListener
5、SimpleAdapter - 可以显示图片和文本的Adapter
- 不能直接使用系统自带的布局文件,要自己写一个xml文件,定义好每个Item中要显示的Image和Text。
- act中准备数据源的数组:
private ArrayList<Map<String,Object>> dataArray; // 数据源数组
private Map<String,Object> map; // 每个Item的数据。注意:使用SimpleAdapter,Item数据只能是Map键值对!这事SimpleAdapter的限制。
dataArray=new ArrayList<Map<String,Object>>();
map=new HashMap<String,Object>();
map.put("img",R.drawable.image1); // 初始化第一个Item的图片资源
map.put("text",R.drawable.text1); // 初始化第一个Item的文本资源
dataArray.add(map); // 存入数组
// 重复上述操作,存入后续Item的资源
- 准备Adapter:
SimpleAdapter adapter=new SimpleAdapter(this, dataArray, R.layout.item, new String[]{"img","text"}, new int[]{R.id.imgView, R.id.textView});
-参数:(1)上下文对象(2)数据源(3)每个Item的布局文件(4)要显示的资源,来自map中的key数组(5)把资源显示到哪个控件中,与前一个参数的顺序保持一致。
- 设置adapter,将listView和Adapter关联起来:
listView.setAdapter(adapter);
- 设置触摸响应:
listView.setOnItemClickListener{
onItemClickListener{
dataArray.remove(position); // 删除一个数据
adapter.notifyDataSetChanged(); // 刷新Adapter,才能显示出来。
}
}
6、自定义Adapter
主要流程和SimpleAdapter一样:写xml,准备数据源,准备Adapter,将listView和Adapter关联起来,设置触摸响应。
主要区别如下:
- 自定义Adapter,要继承BaseAdapter类,实现构造函数和4个方法。
public class MyAdapter extends BaseAdapter{
private Context myContext;
ArrayList<Music> myDataArray; // Music类,在后面有定义; 可以自定义数据类型,而不必局限于Map键值对,这是自定义Adapter的优势。
public MyAdapter(Context context, ArrayList<Music> dataArray){
myContext = context;
myDataArray = dataArray;
}
public int getCount(){
return myDataArray.size();
}
public Object getItem(int position){
return myDataArray.get(position); // 每生成一个Item都会调用一次
}
public long getItemId(int position){
return position;
}
public View getView(int position, View convertView, ViewGroup parent){
// 每生成一个Item都会调用一次。 将xml布局文件转换为View。
LayoutInflater inflater = LayoutInflater.from(myContext,);
View view = inflater.inflate(R.layout.item, null);
ImageView imgView = view.findViewById(R.id.imgView);
TextView textView = view.findViewById(R.id.textView);
imgView.setBackgroundResource( myDataArray.get(position).getImg() ); // 获取Item资源,myDataArray中保存着Music对象。
textView.setText( myDataArray.get(position).getName() );
return view;
}
}
// ---------------------------------
public class Music {
private String name;
private int img; // 图片资源
public String getName(){
return name;
}
public int getImg(){
return img;
}
public void setImg(int img){
this.img = img;
}
}
- 准备数据源:
Music music = new Music();
music.setName("图片a");
music.setImg(R.drawable.a); // 设置图片资源的方法,R.drawable.a就是个数值。
dataArray.add(music); // 将music对象放入资源数组即可。
- 在act中准备Adapter:
adapter = new MyAdapter(this, dataArray); // 数据源通过构造函数传给Adapter。
- AdapterView
- AdapterView
- AdapterVIew
- AdapterView
- AdapterView.OnItemClickListener
- AdapterView.AdapterContextMenuInfo
- ListView+AdapterView
- AdapterView.OnItemClickListener
- AdapterView.OnItemClickListener
- 理解adapterview
- 泛型类AdapterView
- AdapterView setEmptyView
- Android AdapterView
- AdapterView(ListView)
- AdapterView学习
- AdapterView.AdapterContextMenuInfo
- AdapterView适配器
- AdapterView详解
- Windows 7安装教程(详细图解)——思齐博客
- sockaddr_in实例--连接server
- 使用CSS3线性渐变实现图片闪光划过效果
- NYOJ--C小加 之 随机数
- LeetCode之Copy List with Random Pointer
- AdapterView
- Freemarker网站静态化的实现
- 关于ListView的item高亮选择问题
- Java代码查错
- cocos2dx从win32移植到android平台。
- Hibernate各种主键生成策略与配置详解
- 理解VMWare的三种网络连接模式(bridged、NAT、host-only)
- 无法安装Windows 7的几种原因——思齐博客
- 黑马程序员_单例设计模式