Listview的作用是显示一个列表,列表的内容item可以自定义,将需要显示的内容填充入adapter,然后通过listview类的
然后,我们在程序中,只要如下:
得到listview,并对它进行adapter的设置即可。
我只是放了一个textview,为了简单,我们可以根据自己需要在其中放至我们需要的控件。
每个item里定义了两个textview。
以上是SimpleAdapter的用法,下面我们来看下BaseAdapter。
然后是java:
setAdapter(ListAdapter adapter)方法即可完成listview的设置。
下面先看下listview的样子,以下是我做的测试,共有两个item,占两行。
下面来看具体的使用方法
要得到一个listview,很简单,只要在主main.xml文件中,如下写:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListView android:layout_height="wrap_content" android:id="@+id/lvt"
android:layout_width="fill_parent">
</ListView>
</LinearLayout>
然后,我们在程序中,只要如下:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lv = (ListView) findViewById(R.id.lvt);
lv.setAdapter(new adt(new String[]{"菱纱", "紫英"}));
}
得到listview,并对它进行adapter的设置即可。
所以现在关键就在于将我们需要显示的数据如何填充入adapter。
可供我们利用的adapter有很多,我现在接触到的有
SimpleAdapter 、 BaseAdapter。
下面先来看SimpleAdapter。
SimpleAdapter,通过构造器来构造即可,看下它的构造方法:
SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
context,不解释,使用时一般this就可以了
data,这个地方需要的是你想显示在listview中的数据,它的类型应该是一个图类型的链表,
描述不好相信大家可以看懂吧,
看不明白的同学请看这个例子:
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
这样,每一个结点最终就会对应一个item。
resource,这个是每一个item的xml布局实现,可以在这个xml中对item进行自定义设计,比如:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<TextView android:text="TextView" android:id="@+id/tv"
android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
</LinearLayout>
我只是放了一个textview,为了简单,我们可以根据自己需要在其中放至我们需要的控件。
最后的两个参数,from和to即是data中每个结点中的属性值到item中每个控件的属性值的对应关系。
下面来举个栗子:
main.xml文件不多说,就不贴出来了。
来看item的布局文件my_listitem.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_height="wrap_content"
android:id="@+id/MyListItem"
android:paddingBottom="3dip"
android:paddingLeft="10dip">
<TextView
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/ItemTitle"
android:textSize="30dip">
</TextView>
<TextView
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/ItemText">
</TextView>
</LinearLayout>
每个item里定义了两个textview。
然后我们看java文件:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//绑定XML中的ListView,作为Item的容器
ListView list = (ListView) findViewById(R.id.MyListView);
//生成动态数组,并且转载数据
ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
for(int i=0;i<30;i++)
{
HashMap<String, String> map = new HashMap<String, String>();
map.put("ItemTitle", "This is Title.....");
map.put("ItemText", "This is text.....");
mylist.add(map);
}
//生成适配器,数组===》ListItem
SimpleAdapter mSchedule = new SimpleAdapter(this, //没什么解释
mylist,//数据来源
R.layout.my_listitem,//ListItem的XML实现
//动态数组与ListItem对应的子项
new String[] {"ItemTitle", "ItemText"},
//ListItem的XML文件里面的两个TextView ID
new int[] {R.id.ItemTitle,R.id.ItemText});
//添加并且显示
list.setAdapter(mSchedule);
}
以上是SimpleAdapter的用法,下面我们来看下BaseAdapter。
BaseAdapter使用时继承使用就可以,关键还是在于填充数据的方法,原理自然是一样的。
在使item应用我们的布局xml的时候使用的是LayoutInflater
还是看栗子:
main.xml文件就不贴了,下面是item的布局文件viewitem.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<TextView android:text="TextView" android:id="@+id/tv"
android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
</LinearLayout>
然后是java:
public class Test extends Activity {
private ListView lv;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lv = (ListView) findViewById(R.id.lvt);
lv.setAdapter(new adt(new String[]{"菱纱", "紫英"}));
}
public class adt extends BaseAdapter {
View[] viewitem;
public adt(String[] viewtexts) {
viewitem = new View[viewtexts.length];
for (int i = 0; i < viewtexts.length; i++) {
viewitem[i] = makeview(viewtexts[i]);
}
}
private View makeview(String s) {
//得到LayoutInflater对象
LayoutInflater lin = (LayoutInflater) Test.this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//使item应用我们定义好的布局文件
View vt = lin.inflate(R.layout.viewitem, null);
//对item中我们的元素进行相应的属性设置
TextView tv = (TextView) vt.findViewById(R.id.tv);
tv.setText(s);
return vt;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return viewitem.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return viewitem[position];
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
return viewitem[position];
}
}
}