您的位置:首页 > 其它

ListView与适配器的一起使用

2016-02-21 23:05 369 查看
ListView与适配器的一起使用:

(1)与ArrayAdapter使用:

数据源为String[] 或者是List<String>
1)动态定义数据源在res-values下,新建XML,<string-array name=""></string-array>,通过R.array.name找到
例子:<string-array name="userName">
<item >小红</item>
<item >小花</item>
<item >小小</item>
</string-array>
2)得到数据源:getResources().getStringArray(R.array.userName);
3)创建ArrayAdapter适配器
/**
* 第一个参数:上下文(访问系统资源)
* 第二个参数:item布局文件id
*              布局文件可以自定义,系统自带的为android.R.layout.simple_list_item_1
* 第三个参数:数据源
* */
ArrayAdapter(Context上下文,resourceId Item的布局文件id,数据源String[]/List<String>)

ListView.setAdapter(adapter);

ListView使用:
在XML中写控件
在java代码中初始化:
private ListView listView;
listView = (ListView) findViewById(R.id.listview);

setEmptyView():方法,自动匹配当没有数据的时候,显示无数据
使用:在XML中定义TextView,text="暂无数据"
在将要显示信息的地方   .setEmptyView(textview);


(2)与SimpleAdapter使用:图文混排

数据源为List<Map<String,Object>>
1)动态创建数据源在values下,为一组数据;所以形式为:
<string-array name="">
<item>aa</item>
</string-array>
<string-array name="">
<item>aa</item>
</string-array>
......多组

2)得到数据源:
getIdentifier:获取某一资源类型的id,通过资源的实际名称(资源名称与XML中名称一致)
例子:获得图片
/**
* getIdentifier:类似于R.drawable.a/R.String.app_name
* 第一个参数:图标的实际名称
* 第二个参数:资源类型
* 第三个参数:包名
* */
int id = getResources().getIdentifier(userImage[i], "drawable", getPackageName());
将数据添加到map中,添加到List中
例子:获得文字:

3)创建SimpleAdapter:
SimpleAdapter(Context上下文,数据源List<Map<String,Object>>,resourceId Item的布局文件id,
String[]一组Map中键的数组,一组item布局文件中UI控件id的数组);

SimpleAdapter adapter = new SimpleAdapter(this,
totalList,
R.layout.item_listview_main,
new String[]{"userImage","userName","userNum"},
new int[]{R.id.userimage,R.id.username,R.id.usernum});
ListView.setAdapter(adapter);


(3)与BaseAdpter一起使用:自定义适配器

数据源类型根据情况自定义,可以是String[]/List<Map<String,Object>>
1)在XML下建立视图
2)写一个类继承BaseAdapter,重写四个方法:例子:
定义Activity,private Activity activity;
通过构造函数传值将activity传入

3)在Activity中new类,将上下文对象传入

重写的方法:
// 返回ListView里面Item的数量,实质上是数据源的长度
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}

// 返回每一个item中映射的数据,也就是数据源的子元素,所传参数是点击Item的位置
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
//返回id
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}

//返回每一个Item的视图  ,根据getCount决定getView 运行多少次
/* 第一个参数:position,每一个item的位置
* 第二个参数:
* 第三个参数:item的父视图
*/
@Override
public View getView(int position, View convertView, ViewGroup parent) {

// 通过一个Layout填充器,来将listview_main填充,并返回View
View view = activity.getLayoutInflater().inflate(R.layout.listview_main, parent, false);

// 找数据
ImageView image = (ImageView) view.findViewById(R.id.userImage);
TextView name = (TextView) view.findViewById(R.id.userName);
TextView num = (TextView) view.findViewById(R.id.userNum);

// 设置数据
int resId = (int) list.get(position).get("userImage");
image.setImageResource(resId);

name.setText((String) list.get(position).get("userName"));

String numText = (String) list.get(position).get("userNum");
num.setText(numText);

return view;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: