安卓listview使用详解

安卓listview使用详解

通过安卓listview使用详解 – 《Android学习指南》 – Android开发论坛 – 安卓开发论坛 – Android开发 – 安卓论坛 – 移动互联网门户.

android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。
列表的显示需要三个元素:
1ListVeiw 用来展示列表的View
2.适配器  用来把数据映射到ListView上的中介。
3.数据    具体的将被映射的字符串,图片,或者基本组件。
根据列表的适配器类型,列表分为三种,ArrayAdapterSimpleAdapterSimpleCursorAdapter
其中以ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。SimpleCursorAdapter可以认为是SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。
ArrayAdapter
                              
Mainactivity.java

    

package  com.example.listview;

  

  

import  java.util.ArrayList;

  

import  java.util.List;

  

  

import android.app.Activity;

  

import  android.os.Bundle;

  

import  android.view.Menu;

  

import  android.widget.ArrayAdapter;

  

import  android.widget.ListView;

  

  

publicclass MainActivity extends Activity {

  

  

         private  ListView listview;

  

         

  

    @Override

  

    public  void onCreate(Bundle  savedInstanceState) {

  

        super.onCreate(savedInstanceState);

  

      

  

        listview  = new ListView(this);

  

        listview.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1,getdata()));

  

                   setContentView(listview);

  

  

    }

  

  

    private  List getdata() {

  

                   List<String> data=new ArrayList<String>();

  

             data.add(中国);

  

             data.add(美国);

  

             data.add(法国);

  

             data.add(英国);

  

             data.add(俄罗斯);

  

                   return  data;

  

         }

  

  

         @Override

  

    public  boolean onCreateOptionsMenu(Menu  menu) {

  

        getMenuInflater().inflate(R.menu.activity_main, menu);

  

        return  true;

  

    }

  

}

  

ArrayAdapter(Context context,int textViewResourceId, List<T>objects)包含三个函数,(this,布局文件,数据源)
上面的代码中,ArrayAdapter(Context context,int textViewResourceId, List<T>objects)来装配数据,要装配这些数据就需要一个连接ListView视图对象和数组数据的适配器来两者的适配工作,ArrayAdapter的构造需要三个参数,依次为this,布局文件(注意这里的布局文件描述的是列表的每一行的布局,android.R.layout.simple_list_item_1是系统定义好的布局文件只显示一行文字,数据源(一个List集合)。同时用setAdapter()完成适配的最后工作。
SimpleCursorAdapter
简单的说就是方便把从游标得到的数据进行列表显示,并可以把指定的列映射到对应的TextView中。
下面的程序是从电话簿中把联系人显示到类表中。先在通讯录中添加一个联系人作为数据库的数据。然后获得一个指向数据库的Cursor并且定义一个布局文件(当然也可以使用系统自带的)。
由于模拟器里面没有通信录,所以显示为空。
实现代码:
Mainactivity.java

    

package  com.example.listview;

  

  

import  java.util.ArrayList;

  

import  java.util.List;

  

  

import  android.app.Activity;

  

import  android.database.Cursor;

  

import  android.os.Bundle;

  

import  android.provider.Contacts.People;

  

import  android.view.Menu;

  

import  android.widget.ArrayAdapter;

  

import  android.widget.ListAdapter;

  

import  android.widget.ListView;

  

import  android.widget.SimpleAdapter;

  

import  android.widget.SimpleCursorAdapter;

  

  

publicclass MainActivity extends Activity {

  

  

         private  ListView listview;

  

         

  

    @Override

  

    public  void onCreate(Bundle  savedInstanceState) {

  

        super.onCreate(savedInstanceState);

  

      

  

        listview  = new ListView(this);

  

        Cursor  cursor=getContentResolver().query(People.CONTENT_URI, null,  null, null,  null);

  

        startManagingCursor(cursor);

  

        ListAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_expandable_list_item_1,

  

                                     cursor,new String[]{People.NAME}, new  int[]{android.R.id.text1});

  

                   listview.setAdapter(adapter);

  

                   setContentView(listview);

  

  

        

  

    }

  

  

   

  

  

         @Override

  

    public  boolean onCreateOptionsMenu(Menu  menu) {

  

        getMenuInflater().inflate(R.menu.activity_main, menu);

  

        return  true;

  

    }

  

}

  

Cursor cursor =getContentResolver().query(People.CONTENT_URI, null, null, null, null);先获得一个指向系统通讯录数据库的Cursor对象获得数据来源。
 startManagingCursor(cursor);我们将获得的Cursor对象交由Activity管理,这样Cursor的生命周期和Activity便能够自动同步,省去自己手动管理Cursor
 SimpleCursorAdapter 构造函数前面3个参数和ArrayAdapter是一样的,最后两个参数:一个包含数据库的列的String型数组,一个包含布局文件中对应组件idint型数组。其作用是自动的将String型数组所表示的每一列数据映射到布局文件对应id的组件上。上面的代码,将NAME列的数据一次映射到布局文件的idtext1的组件上。
注意:需要在AndroidManifest.xml中如权限:<uses-permissionandroid:name=”android.permission.READ_CONTACTS”></uses-permission>
给程序加权限
SimpleAdapter
simpleAdapter的扩展性最好,可以定义各种各样的布局出来,可以放上ImageView(图片),还可以放上Button(按钮),CheckBox(复选框)等等。下面的代码都直接继承了ListActivityListActivity和普通的Activity没有太大的差别,不同就是对显示ListView做了许多优化,方面显示而已。

接下来,再写一个在实际开发中常用到的listview

我们在实际开发中常常要以下功能:从数据库中读取数据,将信息显示出来
Main.xml
<LinearLayout xmlns:android=“http://schemas.android.com/apk/res/android”

  

    xmlns:tools=“http://schemas.android.com/tools”

  

    android:layout_width=“match_parent”

  

    android:layout_height=“match_parent”

  

    android:orientation=“vertical”>

  

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

  

    xmlns:tools=“http://schemas.android.com/tools”

  

    android:layout_width=“match_parent”

  

    android:layout_height=“wrap_content”

  

    android:orientation=“horizontal”>

  

  

    <TextView

  

    android:id=“@+id/pname”

  

    android:layout_width=“wrap_content”

  

    android:layout_height=“wrap_content”

  

    android:layout_marginLeft=“5dp”

  

    android:layout_weight=“1”

  

    android:text=产品名称

  

    />

  

  

     <TextView

  

    android:id=“@+id/price”

  

    android:layout_width=“wrap_content”

  

    android:layout_height=“wrap_content”

  

    android:layout_marginLeft=“5dp”

  

    android:layout_weight=“1”

  

    android:text=产品价格

  

    />

  

  

      <TextView

  

    android:id=“@+id/area”

  

    android:layout_width=“wrap_content”

  

    android:layout_height=“wrap_content”

  

    android:layout_marginLeft=“5dp”

  

    android:layout_weight=“1”

  

    android:text=产品产地

  

    />

  

    </LinearLayout>

  

  

  

  

    <ListView

  

        android:id=“@+id/listview”

  

        android:layout_width=“match_parent”

  

    android:layout_height=“match_parent”

  

        ></ListView>

  

  

  

</LinearLayout>

  

  [/td][/tr]

mainActivity.java
package com.example.android_listview;

  

  

import java.util.List;

  

import java.util.Map;

  

  

import android.os.Bundle;

  

import android.app.Activity;

  

import android.view.Menu;

  

import android.view.MenuItem;

  

import android.widget.ListView;

  

import android.widget.SimpleAdapter;

  

import android.support.v4.app.NavUtils;

  

  

public class MainActivity extends  Activity {

  

private ListView listView;

  

private SimpleAdapter adapter;

  

private List<Map<String,  String>> data=null;

  

     @Override

  

     public void onCreate(Bundle savedInstanceState) {

  

         super.onCreate(savedInstanceState);

  

         setContentView(R.layout.activity_main);

  

         

  

         listView= (ListView)this.findViewById(R.id.listview);

  

         data=MyDataSource.getMaps();

  

         System.out.println(data+”data”);

  

         adapter=new SimpleAdapter(MainActivity.this, data,  R.layout.activity_main, new  String[]{“pname”,”price”,”address”}, new  int[]{R.id.pname,R.id.price,R.id.area});

  

        listView.setAdapter(adapter);

  

     }

  

  

     @Override

  

     public boolean onCreateOptionsMenu(Menu menu) {

  

         getMenuInflater().inflate(R.menu.activity_main, menu);

  

         return true;

  

     }

  

  

     

  

}

  [/td][/tr]

后台数据
DataSource.Java
package com.example.android_listview;

  

  

import java.util.ArrayList;

  

import java.util.HashMap;

  

import java.util.List;

  

import java.util.Map;

  

  

public class MyDataSource {

  

  

         public  MyDataSource() {

  

                   //  TODO Auto-generated constructor stub

  

         }

  

         

  

         public  static List<Map<String, String>> getMaps(){

  

                  

  

                   List<Map<String,  String>> listMaps=new ArrayList<Map<String,String>>();

  

                   Map<String,  String> map=new HashMap<String, String>();

  

                   map.put(“pname”,  “西瓜“);

  

                   map.put(“price”,  “12.5″);

  

                   map.put(“address”,  “新疆“);

  

                  

  

                   Map<String,  String> map1=new HashMap<String, String>();

  

                   map1.put(“pname”,  “大米“);

  

                   map1.put(“price”,  “12.5″);

  

                   map1.put(“address”,  “湖南“);

  

                  

  

                   Map<String,  String> map2=new HashMap<String, String>();

  

                   map2.put(“pname”,  “西瓜“);

  

                   map2.put(“price”,  “12.5″);

  

                   map2.put(“address”,  “新疆“);

  

                  

  

                   listMaps.add(map1);

  

                   listMaps.add(map2);

  

                   listMaps.add(map);

  

                   return  listMaps;

  

                  

  

         }

  

}

  [/td][/tr]

 

1.jpg (122.28 KB, 下载次数: 16)

1.jpg

 

2.jpg (88.36 KB, 下载次数: 4)

2.jpg

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注