实例教程八:采用ListView实现数据列表显示

不错的帖子:

分享一个Android火焰效果程序
http://www.eoeandroid.com/thread-210395-1-1.html

android 查询工具源代码
http://www.eoeandroid.com/thread-210365-1-1.html

Android在线音乐播放器
http://www.eoeandroid.com/thread-210352-1-1.html

-------------------正文--------------------------

原文链接:http://www.eoeandroid.com/thread-201372-1-1.html

继上一章的数据,继续添加内容
item.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"      android:orientation="horizontal" >        <TextView          android:id="@+id/txtName"          android:layout_width="120dp"          android:layout_height="wrap_content"          android:text="xxxxx" />        <TextView          android:id="@+id/txtPhone"          android:layout_width="150dp"          android:layout_height="wrap_content"          android:text="xxxxx" />        <TextView          android:id="@+id/txtAmount"          android:layout_width="fill_parent"          android:layout_height="wrap_content"          android:text="2000" />    </LinearLayout>

main.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"      android:orientation="vertical" >            <LinearLayout           android:layout_width="fill_parent"      android:layout_height="wrap_content"      android:orientation="horizontal">                    <TextView               android:layout_width="120dp"              android:layout_height="wrap_content"              android:text="@string/name"/>                    <TextView               android:layout_width="120dp"              android:layout_height="wrap_content"              android:text="@string/phone"/>                    <TextView               android:layout_width="fill_parent"              android:layout_height="wrap_content"              android:text="@string/amount"/>                </LinearLayout>        <ListView          android:layout_width="fill_parent"          android:layout_height="fill_parent"          android:id="@+id/lstShow" />    </LinearLayout>
package cn.itcast.db;    import java.util.ArrayList;  import java.util.HashMap;  import java.util.List;    import cn.itcast.domain.Person;  import cn.itcast.domain.PersonAdapter;  import cn.itcast.service.PersonService;  import android.app.Activity;  import android.database.Cursor;  import android.os.Bundle;  import android.view.View;  import android.widget.AdapterView;  import android.widget.ListView;  import android.widget.SimpleAdapter;  import android.widget.SimpleCursorAdapter;  import android.widget.Toast;  import android.widget.AdapterView.OnItemClickListener;    public class MainActivity extends Activity {          //在Android平台上,集成了一个嵌入式关系型数据库——SQLite          //SQLite3支持NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型          //虽然它支持的类型只有5种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p, s)等数据          //只不过在运行或保存时会转成对应的五种数据类型          //SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型是什么            private ListView lstShow;          private PersonService personService;            @Override          public void onCreate(Bundle savedInstanceState) {                  super.onCreate(savedInstanceState);                  setContentView(R.layout.main);                    personService = new PersonService(this);                                  lstShow = (ListView)this.findViewById(R.id.lstShow);                  lstShow.setOnItemClickListener(new ItemClickListener());                  //show();                  //show2();                  show3();          }                    private final class ItemClickListener implements OnItemClickListener{                  @Override                  public void onItemClick(AdapterView<?> parent, View view, int position,                                  long id) {                                                    ListView lView = (ListView)parent;                          //和show()3配对                          Person person = (Person)lView.getItemAtPosition(position);                          Toast.makeText(getApplicationContext(), person.getId().toString(), 1).show();                                                    //和show()2配对                          Cursor cursor = (Cursor)lView.getItemAtPosition(position);                          int personId = cursor.getInt(cursor.getColumnIndex("_id"));                          Toast.makeText(getApplicationContext(), personId, 1).show();                                                    //和show()配对                          List<HashMap<String, Object>> hashMap = (List<HashMap<String, Object>>)lView.getItemAtPosition(position);                          int Id = Integer.valueOf(hashMap.get(personId).get("personId").toString());                          Toast.makeText(getApplicationContext(), Id, 1).show();                  }                          }            //自定义适配器          private void show3() {                  List<Person> persons = personService.getScrollData(0, 20);                  PersonAdapter adapter = new PersonAdapter(this, persons, R.layout.item);                  lstShow.setAdapter(adapter);          }            private void show2() {                  Cursor cursor = personService.getCursorScrollData(0, 20);                  SimpleCursorAdapter adapter =                           new SimpleCursorAdapter(this, R.layout.item, cursor,                                          new String[]{"name", "phone", "amount"},                                           new int[]{R.id.txtName, R.id.txtPhone, R.id.txtAmount});                  lstShow.setAdapter(adapter);                                    //直接运行会报错,原因是SimpleCursorAdapter要求结果集中必须包含_id字段                  //修复方法:1.把数据库表中的主键名称personId改为_id                  //2.处理查询后的结果集          }            private void show() {                  List<Person> persons = personService.getScrollData(0, 20);                  List<HashMap<String, Object>> data = new ArrayList<HashMap<String, Object>>();                  for(Person person : persons){                          HashMap<String, Object> item = new HashMap<String, Object>();                          item.put("name", person.getName());                          item.put("phone", person.getPhone());                          item.put("amount", person.getAmount());                          item.put("id", person.getId());                          data.add(item);                  }                  SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item,                                  new String[]{"name", "phone", "amount"},                                   new int[]{R.id.txtName, R.id.txtPhone, R.id.txtAmount});                  lstShow.setAdapter(adapter);                  //listView内部操作过程                  //{                  //        int total = adapter.getCount(); //用于得到数据总数                  //        int perpage = 7;                  //        for (int i = 0; i < perpage; i++) {                  //                View view = adapter.getView(i, convertView, parent); //用于得到条目对应的View                  //                //显示条目                  //        }                  //}          }    }
package cn.itcast.domain;    import java.util.List;    import cn.itcast.db.R;    import android.content.Context;  import android.view.LayoutInflater;  import android.view.View;  import android.view.ViewGroup;  import android.widget.BaseAdapter;  import android.widget.TextView;    public class PersonAdapter extends BaseAdapter {          private List<Person> persons; //绑定数据          private int resource; //绑定条目界面          private LayoutInflater inflater;                    public PersonAdapter(Context context, List<Person> persons, int resouce){                  this.persons = persons;                  this.resource = resource;                  inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);          }            @Override          public int getCount() {                  return persons.size(); //得到数据总数          }            @Override          public Object getItem(int position) {                  return persons.get(position);          }            @Override          public long getItemId(int position) {                  return position;          }            @Override          public View getView(int position, View convertView, ViewGroup parent) {                  TextView txtName = null;                  TextView txtPhone = null;                  TextView txtAmount = null;                  //这样提升性能                  if(convertView == null){ //表明现在是第1页                          inflater.inflate(resource, null); //生成条目界面对象                                                    txtName = (TextView)convertView.findViewById(R.id.txtName);                          txtPhone = (TextView)convertView.findViewById(R.id.txtPhone);                          txtAmount = (TextView)convertView.findViewById(R.id.txtAmount);                                                    ViewCache cache = new ViewCache();                          cache.txtName = txtName;                          cache.txtPhone = txtPhone;                          cache.txtAmount = txtAmount;                                                    convertView.setTag(cache);                  }else{                          ViewCache cache = (ViewCache)convertView.getTag();                          txtName = cache.txtName;                          txtPhone = cache.txtPhone;                          txtAmount = cache.txtAmount;                  }                                                    Person person = persons.get(position);                  //下面代码实现数据绑定                  txtName.setText(person.getName());                  txtPhone.setText(person.getPhone());                  txtAmount.setText(person.getAmount().toString());                                    return null;          }                    private final class ViewCache{                  public TextView txtName;                  public TextView txtPhone;                  public TextView txtAmount;          }  }

 

 

你可能感兴趣的:(Android开发,ListView,移动开发)