Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段(转)
2014-09-30 10:21
633 查看
摘自:/article/1713171.html
Adapter是连接后端数据和前端显示的适配器接口,是数据Data和UI(视图View)之间一个重要的纽带。
下图表达了数据Data、适配器Adapter、UI视图View三者之间的紧密关系。
注意:当数据发生改变时都要用Adater调用自己notifyDataSetChanged()方法来通知UI视图View
重新刷新界面展示新的数据源。
收藏ArrayAdapter、SimpleAdapter和BaseAdapter的一些简短代码片段,希望用时方便想起其用法。
1.ArrayAdapter
只可以简单的显示一行文本
代码片段:
[java] view plaincopy
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,
R.layout.item,//只能有一个定义了id的TextView
data);//data既可以是数组,也可以是List集合
另外 onItemClick(AdapterView<?> parent, View view, int position, long id)
参数介绍如下:
parent:被单击的ListView对象
view:被单击的那一项
position:被单击的那一项在ListView中的位置
id:被选中的那一行的id
ArrayAdapter三种适配器样式:
1 多选ListView的item条目: android.R.layout.simple_list_item_multiple_choice
2 单选ListView的item条目: android.R.layout.simple_list_item_single_choice
3 全选ListView的item条目: android.R.layout.simlple_list_item_checked
2.SimpleAdapter
可以显示比较复杂的列表,包括每行显示图片、文字等,但不能对列表进行后期加工(在java代码中加工),
也是只是单纯的负责显示(当然可以设计复杂点的布局来显示复杂列表),例如,每行显示不同背景等。
代码片段:
[java] view plaincopy
List<Map<String,Object>> mData= new ArrayList<Map<String,Object>>();;
for(int i =0; i < lengh; i++) {
Map<String,Object> item = new HashMap<String,Object>();
item.put("image", R.drawable.portrait);
item.put("title", mListTitle[i]);
item.put("text", mListStr[i]);
mData.add(item);
}
SimpleAdapter adapter = new SimpleAdapter(
this, --是上下文对象
mData, --mData是基于Map的List,这个Map集合包含了ListView每一个item视图需要的数据
R.layout.item, --是ListView每一个item条目样式的视图布局
new String[]{"image","title","text"}, --是一个名称的数组,每个名称是为了在ArrayList中的每个索引Map的key的名称
new int[]{R.id.image,R.id.title,R.id.text}); --是一个用于显示ListView中的每一个item条目样式的视图的id的数组。
3.BaseAdapter
可以实现复杂的列表布局,由于BaseAdapter是一个抽象类,使用该类需要自己写一个适配器继承该类,
正是由于继承了该类,需要我们重写一些方法,让我们可以在代码里控制列表的样式,更加灵活。
继承BaseAdapter,要覆写getView()方法,此方法返回一个ListView每个item的视图View
代码片段:
[java] view plaincopy
private class MyListAdapter extends BaseAdapter{
private Context mContext;
private int[] colors=new int[]{0xff626569,0xff4f5257 };
public MyListAdapter(Context context){
mContext=context;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mListText.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView image=null; //这些控件可以单独封装成一个类(Holder),便与优化
TextView title=null;
TextView content=null;
if(convertView==null){
convertView=LayoutInflater.from(mContext).inflate(R.layout.colorlist, null);
image=(ImageView) convertView.findViewById(R.id.color_image);
title=(TextView) convertView.findViewById(R.id.color_title);
content=(TextView) convertView.findViewById(R.id.color_text);
}
int colorPos=position%colors.length;
convertView.setBackgroundColor(colors[colorPos]);
title.setText(mListTitle[position]);
content.setText(mListText[position]);
image.setImageResource(R.drawable.portrait);
return convertView;
}
}
--------------------------下面样例列表页的控件单独封装成了一个类(Holder),便与优化-----
public class MyBaseAdapter extends BaseAdapter{
private LayoutInflater mInflater;
public MyAdapter(Context context){
this.mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mData.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder=new ViewHolder();
convertView = mInflater.inflate(R.layout.vlist2, null);
holder.img = (ImageView)convertView.findViewById(R.id.img);
holder.title = (TextView)convertView.findViewById(R.id.title);
holder.info = (TextView)convertView.findViewById(R.id.info);
holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);
convertView.setTag(holder);
}else {
holder = (ViewHolder)convertView.getTag();
}
holder.img.setBackgroundResource((Integer)mData.get(position).get("img"));
holder.title.setText((String)mData.get(position).get("title"));
holder.info.setText((String)mData.get(position).get("info"));
//给每一个列表后面的按钮添加响应事件
holder.viewBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showInfo();
}
});
return convertView;
}
------------
public final class ViewHolder{
public ImageView img;
public TextView title;
public TextView info;
public Button viewBtn;
}
Adapter是连接后端数据和前端显示的适配器接口,是数据Data和UI(视图View)之间一个重要的纽带。
下图表达了数据Data、适配器Adapter、UI视图View三者之间的紧密关系。
注意:当数据发生改变时都要用Adater调用自己notifyDataSetChanged()方法来通知UI视图View
重新刷新界面展示新的数据源。
收藏ArrayAdapter、SimpleAdapter和BaseAdapter的一些简短代码片段,希望用时方便想起其用法。
1.ArrayAdapter
只可以简单的显示一行文本
代码片段:
[java] view plaincopy
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
this,
R.layout.item,//只能有一个定义了id的TextView
data);//data既可以是数组,也可以是List集合
另外 onItemClick(AdapterView<?> parent, View view, int position, long id)
参数介绍如下:
parent:被单击的ListView对象
view:被单击的那一项
position:被单击的那一项在ListView中的位置
id:被选中的那一行的id
ArrayAdapter三种适配器样式:
1 多选ListView的item条目: android.R.layout.simple_list_item_multiple_choice
2 单选ListView的item条目: android.R.layout.simple_list_item_single_choice
3 全选ListView的item条目: android.R.layout.simlple_list_item_checked
2.SimpleAdapter
可以显示比较复杂的列表,包括每行显示图片、文字等,但不能对列表进行后期加工(在java代码中加工),
也是只是单纯的负责显示(当然可以设计复杂点的布局来显示复杂列表),例如,每行显示不同背景等。
代码片段:
[java] view plaincopy
List<Map<String,Object>> mData= new ArrayList<Map<String,Object>>();;
for(int i =0; i < lengh; i++) {
Map<String,Object> item = new HashMap<String,Object>();
item.put("image", R.drawable.portrait);
item.put("title", mListTitle[i]);
item.put("text", mListStr[i]);
mData.add(item);
}
SimpleAdapter adapter = new SimpleAdapter(
this, --是上下文对象
mData, --mData是基于Map的List,这个Map集合包含了ListView每一个item视图需要的数据
R.layout.item, --是ListView每一个item条目样式的视图布局
new String[]{"image","title","text"}, --是一个名称的数组,每个名称是为了在ArrayList中的每个索引Map的key的名称
new int[]{R.id.image,R.id.title,R.id.text}); --是一个用于显示ListView中的每一个item条目样式的视图的id的数组。
3.BaseAdapter
可以实现复杂的列表布局,由于BaseAdapter是一个抽象类,使用该类需要自己写一个适配器继承该类,
正是由于继承了该类,需要我们重写一些方法,让我们可以在代码里控制列表的样式,更加灵活。
继承BaseAdapter,要覆写getView()方法,此方法返回一个ListView每个item的视图View
代码片段:
[java] view plaincopy
private class MyListAdapter extends BaseAdapter{
private Context mContext;
private int[] colors=new int[]{0xff626569,0xff4f5257 };
public MyListAdapter(Context context){
mContext=context;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mListText.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView image=null; //这些控件可以单独封装成一个类(Holder),便与优化
TextView title=null;
TextView content=null;
if(convertView==null){
convertView=LayoutInflater.from(mContext).inflate(R.layout.colorlist, null);
image=(ImageView) convertView.findViewById(R.id.color_image);
title=(TextView) convertView.findViewById(R.id.color_title);
content=(TextView) convertView.findViewById(R.id.color_text);
}
int colorPos=position%colors.length;
convertView.setBackgroundColor(colors[colorPos]);
title.setText(mListTitle[position]);
content.setText(mListText[position]);
image.setImageResource(R.drawable.portrait);
return convertView;
}
}
--------------------------下面样例列表页的控件单独封装成了一个类(Holder),便与优化-----
public class MyBaseAdapter extends BaseAdapter{
private LayoutInflater mInflater;
public MyAdapter(Context context){
this.mInflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mData.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder=new ViewHolder();
convertView = mInflater.inflate(R.layout.vlist2, null);
holder.img = (ImageView)convertView.findViewById(R.id.img);
holder.title = (TextView)convertView.findViewById(R.id.title);
holder.info = (TextView)convertView.findViewById(R.id.info);
holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);
convertView.setTag(holder);
}else {
holder = (ViewHolder)convertView.getTag();
}
holder.img.setBackgroundResource((Integer)mData.get(position).get("img"));
holder.title.setText((String)mData.get(position).get("title"));
holder.info.setText((String)mData.get(position).get("info"));
//给每一个列表后面的按钮添加响应事件
holder.viewBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showInfo();
}
});
return convertView;
}
------------
public final class ViewHolder{
public ImageView img;
public TextView title;
public TextView info;
public Button viewBtn;
}
相关文章推荐
- [转]Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段
- Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段
- Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段
- Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段
- Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段
- Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段
- Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法与有用代码片段
- 【Android】Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法
- Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法
- Android 常用Adapter(ArrayAdapter ,SimpleAdapter ,BaseAdapter )的具体用法
- android中SimpleAdapter、ArrayAdapter的用法以及继承了ListActivity的设置适配器的方法
- Android Adapter接口及实现类之ArrayAdapter、SimpleAdapter和BaseAdapter的简单介绍及运用
- Android-简单适配器SimpleAdapter的用法
- android ListView适配器之SimpleAdapter的用法
- [Android] Adapter:SimpleAdapter SimpleCursorAdapter ArrayAdapter 与ListView的用法
- GridView && ArrayAdapter && SimpleAdapter && BaseAdapter【Android】
- ListView 的三种适配器 BaseAdapter ArrayAdapter SimpleAdapter(2)
- Android-ListView详解(SimpleAdapter,ArrayAdapter,BaseAdapter,OnItenClickListener,OnScrollListener)
- ListView (3) 之适配器 ArrayAdapter/SimpleAdapter/BaseAdapter
- Android 中ArrayAdapter,SimpleAdapter,BaseAdapter三种适配器的使用