首页

ListView控件

搜索

概述

ListView是android应用程序中使用频率最高的控件。该控件使用垂直列表的方式显示多个选项,特别适合于手机这种屏幕相对较小的设备。

ListView控件的特点:每个列表项独占一行,每行的布局都相同,数据和布局分离,支持数据来自适配器,ListView只负责布局,图-2是ListView的一个应用:

  图-2

说明:

ListView是AdapterView的间接子类,支持适配器填充数据。

ListView就是一个容器,可以包含Item(child)

常用属性

XML属性

说明

choiceMode

设置ListView的选择方式,有三个值:

    (1)none:默认方式

(1) SingleChoice:单选

(2) multipleChoice:复选

divider

设置列表项的分隔条,分隔条可以是颜色值也可以是图片

entries

指定一个字符串数组资源,用于显示在ListView中

常用方法

1、Object getItemAtPosition(int position)

作用:获得当前列表项

参数-position:当前列表项的索引值。

示例:

//获取索引值是position的列表项,转换为字符串

String text=(String)listView.getItemAtPosition(position);

2、void setChoiceMode(int choiceMode)

作用:设置列表的选择方式

参数-choiceMode有以下三个可选值:

ListView. CHOICE_MODE_NONE:默认选择方式,如图-2所示。

ListView. CHOICE_MODE_SINGLE:单选按钮。

ListView.CHOICE_MODE_MULTIPLE:复选框。

ListView的使用步骤

步骤1、在布局文件中声明ListView控件;

步骤2、在布局文件中为ListView的Item设置显示样式;

步骤3、在Activity中实例化listView;

步骤4、获取数据集,即创建需要在ListView中显示的数据;

步骤5、创建适配器对象;

步骤6、设置listview对象与步骤5创建的适配器对象相关联。

说明:

Android的AdapterView采用MVC模式显示、处理数据,其中以上的

步骤1、2是View层,负责设置显示的样式。

步骤4是Module层,创建需要显示的数据。

步骤5是控制层,负责将数据显示在View中。

示例

在ListView中显示图-2所示的数据:

图-2

步骤1、创建项目Day05_01_ListView,包名:com.tarena.day0501_lv,项目入口:

Day05_01_ListViewActivity.java。

步骤2、打开res/layout/main.xml文件,在该文件中定义ListView控件,如下代码所示:

<?xml version="1.0" encoding="utf-8"?>

<ListView 

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:id="@+id/lvStudents" />

步骤3、在res/layout文件夹下创建item_stu.xml文件,输入如下代码:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent">

<ImageView 

    android:id="@+id/ivIcon"

    android:layout_width="64dp"

    android:layout_height="64dp"

    android:scaleType="fitCenter"

    android:src="@drawable/ic_launcher"/>    

<TableLayout 

    android:layout_width="0dp"

    android:layout_height="64dp"

    android:layout_weight="1.0"

    android:stretchColumns="0,1"

    android:gravity="center_vertical">

    <TableRow >

        <TextView 

            android:id="@+id/tvId"

            android:text="1"/>

        <TextView 

            android:id="@+id/tvName"

            android:text="张三"/>

    </TableRow>

    <TableRow >

        <TextView 

            android:id="@+id/tvSex"

            android:text="男"/>

        <TextView 

            android:id="@+id/tvAge"/>

    </TableRow>

</TableLayout>

</LinearLayout>

步骤4、在项目中创建com.tarena.entity包,在该包下创建Student.java类,该类代码如下:

public class Student {

private int id;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getSex() {

return sex;

}

public void setSex(String sex) {

this.sex = sex;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

private String name;

private String sex;

private int age;

}

步骤5、在项目中创建com.tarena.biz包,在该包下创建StudentBiz类,该类用于提供数据,代码如下:

public class StudentBiz {

private Random rand ;

public StudentBiz(){

rand = new Random();

}

//将一组学生对象存放在ArrayList集合对象中

public ArrayList<Student> getStudents(){

ArrayList<Student> stus = new ArrayList<Student>();

for(int i=1;i<=20;i++){

Student stu = new Student();

stu.setId(i);

stu.setName("张老" + i);

stu.setAge(rand.nextInt(8)+18);

if(i%2==0)

stu.setSex("男");

else

stu.setSex("女");

stus.add(stu);

}

return stus;

}

}

步骤6、在项目中创建com.tarena.adapter包,在该包下创建StuAdapter类,该类用于向ListView中填充数据,代码如下:

public class StuAdapter extends BaseAdapter {

private ArrayList<Student> students;

private LayoutInflater inflater;

public void setStudents(ArrayList<Student> students) {

if(students!=null)

this.students = students;

else

this.students = new ArrayList<Student>();

}

public StuAdapter(Context context,ArrayList<Student> students){

this.inflater = LayoutInflater.from(context);

this.setStudents(students);

}

/**

 * 获取 当前adpater中数据条数

 * @return

 */

@Override

public int getCount() {

return students.size();

}

@Override

public Object getItem(int position) {

return students.get(position);

}

@Override

public long getItemId(int position) {

return students.get(position).getId();

}

/**

 * 根据指定位置(postion)获取相应的item

 * @param position

 * @param convertView

 * @param parent

 * @return

 */

@Override

public View getView(int position, View convertView, ViewGroup parent) {

// TODO Auto-generated method stub

//加载item界面

View item = inflater.inflate(R.layout.item_stu, null);

ImageView ivIcon = (ImageView)item.findViewById(R.id.ivIcon);

TextView tvId = (TextView)item.findViewById(R.id.tvId);

TextView tvName = (TextView)item.findViewById(R.id.tvName);

TextView tvAge = (TextView)item.findViewById(R.id.tvAge);

TextView tvSex = (TextView)item.findViewById(R.id.tvSex);

//根据postion从集合中获取一条数据

Student stu = students.get(position);

//把数据绑定在item界面上

ivIcon.setImageResource(R.drawable.ic_launcher);

tvId.setText(stu.getId()+"");

tvName.setText(stu.getName());

tvAge.setText(stu.getAge()+"");

tvSex.setText(stu.getSex());

//返回item界面

return item;

}

}

步骤7、在com.tarena.day0501_lv包下打开Day05_01_ListViewActivity.java类,输入如下代码:

public class Day05_01_ListViewActivity extends Activity {

    private ListView lvStudents;

    private StudentBiz biz;

    private StuAdapter adapter;

    private void setupView(){

     //实例化listView

     lvStudents = (ListView)findViewById(R.id.lvStudents);

     //加载数据集

     ArrayList<Student> stus = biz.getStudents();

     //使用数据集构造adapter对象

     adapter = new StuAdapter(this, stus);

     //设置listview的adapter

     lvStudents.setAdapter(adapter);

    }

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        biz = new StudentBiz();

        setupView();

    }

}

 

上一页 下一页