一、ListView是手机系统中使用很广泛的一种组件,它以垂直列表的形式显示所有列表项。创建列表视图有两种方式:
- 直接使用ListView进行创建
- 让Activity继承ListActivity(相当于该Activity显示的组件为ListView)
二、在获取列表视图后,要为其提供显示的列表项。ListView可以通过ListAdapter获取列表项。创建ListAdapter后,可通过setAdapter(adapter)方法为之提供adapter,并有adapter为其提供列表项。
三、Adapter接口及实现类
1、Adapter常用的实现类如下:
- ArrayAdapter
- SimpleAdapter
- BaseAdapter
2、ArrayAdapter用法及示例
package com.example.arrayadaptertest;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView list1=(ListView)findViewById(R.id.list1);
String[] arr1={"孙悟空","猪八戒","沙和尚"};
ArrayAdapter adapter1=new ArrayAdapter(this,R.layout.array_item,arr1);
list1.setAdapter(adapter1);
ListView list2=(ListView)findViewById(R.id.list2);
String[] arr2={"Java","android","Spring","haha"};
ArrayAdapter adapter2=new ArrayAdapter(this,R.layout.array_item,arr2);
list2.setAdapter(adapter2);
}
}
布局文件activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/list1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="#f00"
android:dividerHeight="2px"
android:footerDividersEnabled="false"
/>
<ListView
android:id="@+id/list2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="#00f"
android:dividerHeight="2px"
android:footerDividersEnabled="true"/>
</LinearLayout>
布局文件array_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="24dp"
android:padding="10px"
>
</TextView >
这里ArrayAdapter的构造函数采用:
3、SimpleAdapter用法示例
该类只有一个构造函数:
第二个参数:该集合中的每个Map对象生成一个列表项
第三个参数:该参数应该是一个String【】类型的参数,该参数决定提取Map对象中哪些KEY对应的Value来生成列表项
第四个参数:该参数应该是一个ing【】类型的参数,
该参数决定填充哪些组件;
代码示例:
package com.example.simpleadaptertest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
public class MainActivity extends Activity {
private String[] names={"虎头","弄玉","李清照","李白"};
private String[] descs = { "可爱的小孩", "一个擅长音乐的女孩", "一个擅长文学的女性", "浪漫主义诗人"};
private int[] imageIds ={ R.drawable.tiger , R.drawable.nongyu, R.drawable.qingzhao , R.drawable.libai};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<Map<String,Object>> listItems=new ArrayList<Map<String,Object>>();
for(int i=0;i<names.length;i++){
Map<String,Object> listItem=new HashMap<String,Object>();
listItem.put("header", imageIds[i]);
listItem.put("personName", names[i]);
listItem.put("desc", descs[i]);
listItems.add(listItem);
}
SimpleAdapter simpleAdapter=new SimpleAdapter(this,listItems,R.layout.simple_item,new String[] {"personName","header","desc"},
new int[] {R.id.name,R.id.header,R.id.desc});
ListView list=(ListView)findViewById(R.id.list1);
list.setAdapter(simpleAdapter);
list.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
System.out.println(names[position]+"被单击了");
}
});
}
}
</pre><pre class="java" name="code">4、BaseAdapter用法示例:
需要重写它的一些方法;
示例:
package com.example.baseadaptertest;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView list=(ListView)findViewById(R.id.list);
BaseAdapter baseAdapter=new BaseAdapter(){
@Override
public int getCount() {
// TODO Auto-generated method stub
return 40;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
@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
LinearLayout line=new LinearLayout(MainActivity.this);
line.setOrientation(0);
ImageView imageView=new ImageView(MainActivity.this);
imageView.setImageResource(R.drawable.ic_launcher);
TextView text=new TextView(MainActivity.this);
text.setText("第"+(position+1)+"个列表项");
text.setTextSize(20);
line.addView(imageView);
line.addView(text);
return line;
}
};
list.setAdapter(baseAdapter);
}
}