一、Listview的使用:
1、Listview是可以存放其他组件的容器。
①Listview想要显示条目要调用listview.setAdapter方法设置一个适配器。
②、listview需要被告诉显示多少个条目。
③、指定listview中每个条目显示什么样子。
//获取ListView空间:
ListViewlv= (ListView) this.findViewById(R.id.lv);
// 要想设置listview的显示的内容 就需要把listview的数据适配器给设置进去
lv.setAdapter(new MyAdapter());
//给listview的每一个条目注册点击事件.
//setOnItemClickListener方法参数为:ClickListener接口的子类
lv.setOnItemClickListener(newOnItemClickListener() {
//点击条目执行参数(listview对象,当前点击条目的view对象,位置,行号)
public voidonItemClick(AdapterViewparent, View view,
intposition, long id) {
//获取适配器中getItem()方法的返回值。
lv.getItemAtPosition(position);
//获取适配器中getItemId方法的返回值。
lv.getItemIdAtPosition(position);
}
});
2、自定义适配器类,继承BaseAdapter类。
publicclass MyAdapter extends BaseAdapter{
/**
* 告诉listview显示多个条目
*/
@Override
public int getCount() {
return5;
}
/**
* 返回每一个条目对应的对象。
*/
@Override
public Object getItem(int position) {
returnnull;
}
/**
* 返回每一个条目对应的编号,
*/
@Override
public long getItemId(int position) {
returnposition;
}
/**
* 设置listview每一个条目显示成什么样子,并返回每个组件。
* 这个方法会被调用多少次?
* 方法参数1:当前条目显示的位置,从0开始
*方法的返回值是:view对象。
*/
@Override
public View getView(int position, ViewconvertView, ViewGroup parent) {
if(position==0){//第一个位置。
//创建TextView 对象。
TextViewtv = new TextView(DemoActivity.this);
tv.setText("我是第一个textview");
returntv;
}
if(position==1){
//创建图片view
ImageView iv = newImageView(DemoActivity.this);
iv.setImageResource(R.drawable.ic_launcher);
return iv;
}
TextViewtv1 = new TextView(DemoActivity.this);
tv1.setText("我是textview"+position);
returntv1;
}
}
}
二、系统提供的适配器:
1、SimpleAdapter类:
ListView lv = (ListView) this.findViewById(R.id.lv);
LayoutInflater inflater = (LayoutInflater)getSystemService(
LAYOUT_INFLATER_SERVICE);
datas =new ArrayList>();
for(Person p : persons){
Map map = newHashMap();,>,string>
map.put("name", p.getName());
map.put("phone", p.getPhone());
datas.add(map);
}
//设置适配器
lv.setAdapter(new SimpleAdapter(this, datas,
R.layout.item,
new String[]{"name","phone"},
newint[]{R.id.tv_name,R.id.tv_phone}));
SimpleAdapter 类构造函数的参数:
参数1:上下文,
参数2:数据,list集合中是map集合。List>
参数3:条目显示的布局,布局对应的资源文件。
参数4:对象的属性,map中作为key的值。
参数5:组件的id的int数组。
2、ArrayAdapter类:
lv.setAdapter(new ArrayAdapter(this,R.layout.item,
R.id.tv_name,new String[]{"张三","李四","王五"}));
三、布局填充器的使用:
1、填充器,将布局的xml中的布局转成view对象:
2、获取布局填充器对象:
LayoutInflater inflater = (LayoutInflater)getSystemService(
LAYOUT_INFLATER_SERVICE);
//将布局文件转成view对象的的方法,参数(布局的xml文件, 是否独立的参数)
//R.layout.item:对应layout目录下的item.xml文件。
View view =inflater.inflate(R.layout.item, null);
//获取view对象中的id为tv_name的组件。
TextView tv_name= (TextView) view.findViewById(R.id.tv_name);
3、layout目录下的item.xml文件内容为:
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:orientation="vertical" >
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="姓名"
android:textAppearance="?android:attr/textAppearanceLarge"/>
android:id="@+id/tv_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="电话号码"
android:textSize="18sp"
/>