Android控件中ListView详解

Android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示。
main.xml布局文件
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout android:id="@+id/LinearLayout01"
  3.     android:layout_width="fill_parent" android:layout_height="fill_parent"
  4.     xmlns:android="http://schemas.android.com/apk/res/android">
  5.     <ListView android:layout_width="wrap_content"
  6.         android:layout_height="wrap_content" 
  7.         android:id="@+id/MyListView">
  8.     </ListView>
  9. </LinearLayout>
复制代码



my_listitem.xml布局文件
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout android:layout_width="fill_parent"
  3.     xmlns:android="http://schemas.android.com/apk/res/android"
  4.     android:orientation="vertical" 
  5.     android:layout_height="wrap_content"
  6.     android:id="@+id/myListItem" 
  7.     android:paddingBottom="3dip"
  8.     android:paddingLeft="10dip">
  9.     <TextView android:layout_height="wrap_content"
  10.         android:layout_width="fill_parent" 
  11.         android:id="@+id/itemTitle"
  12.         android:textSize="20dip">
  13.     </TextView>
  14.     <TextView android:layout_height="wrap_content"
  15.         android:layout_width="fill_parent" 
  16.         android:id="@+id/itemText">
  17.     </TextView>
  18. </LinearLayout>
复制代码



LsActivity类
  1. package com.ljq.ls;

  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;

  5. import android.app.Activity;
  6. import android.os.Bundle;
  7. import android.widget.ListView;
  8. import android.widget.SimpleAdapter;

  9. public class LsActivity extends Activity {
  10.     private ListView list = null;
  11.     
  12.     public void onCreate(Bundle savedInstanceState) {
  13.         super.onCreate(savedInstanceState);
  14.         setContentView(R.layout.main);
  15.         list = (ListView) findViewById(R.id.MyListView);
  16.         
  17.         //组织数据源
  18.         List<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
  19.         for(int i=0;i<10;i++) {
  20.             HashMap<String, String> map = new HashMap<String, String>();
  21.             map.put("itemTitle", "This is Title");
  22.             map.put("itemText", "This is text");
  23.             mylist.add(map);
  24.         }
  25.         
  26.         //配置适配器
  27.         SimpleAdapter adapter = new SimpleAdapter(this, 
  28.                                                   mylist,//数据源 
  29.                                                   R.layout.my_listitem,//显示布局
  30.                                                   new String[] {"itemTitle", "itemText"}, //数据源的属性字段
  31.                                                   new int[] {R.id.itemTitle,R.id.itemText}); //布局里的控件id
  32.         //添加并且显示
  33.         list.setAdapter(adapter);
  34.     }
  35. }
复制代码



运行结果
Android控件中ListView详解 - NedLees - NedLees的博客

目录结构
Android控件中ListView详解 - NedLees - NedLees的博客
main.xml布局文件
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- 使用相对布局 -->
  3. <RelativeLayout
  4.     xmlns:android="http://schemas.android.com/apk/res/android"
  5.     android:orientation="vertical" 
  6.     android:layout_width="wrap_content"
  7.     android:layout_height="wrap_content">
  8.     <TextView android:layout_width="100dip"
  9.         android:layout_height="wrap_content"
  10.         android:layout_marginLeft="30dip"
  11.         android:textSize="20dip"
  12.         android:id="@+id/id"/>
  13.     <TextView android:layout_width="100dip"
  14.         android:layout_height="wrap_content"
  15.         android:layout_alignTop="@id/id"
  16.         android:layout_toRightOf="@id/id"
  17.         android:textSize="20dip"
  18.         android:id="@+id/name"/>
  19.     <TextView android:layout_width="wrap_content"
  20.         android:layout_height="wrap_content"
  21.         android:layout_alignTop="@id/name"
  22.         android:layout_toRightOf="@id/name"
  23.         android:textSize="20dip"
  24.         android:id="@+id/age"/>
  25. </RelativeLayout>
复制代码



实体JavaBean
  1. package com.ljq.domain;


  2. public class Person {

  3.     private String id;
  4.     private String name;
  5.     private String age;

  6.     public Person() {
  7.         super();
  8.     }

  9.     public Person(String id, String name, String age) {
  10.         super();
  11.         this.id = id;
  12.         this.name = name;
  13.         this.age = age;
  14.     }

  15.     public String getId() {
  16.         return id;
  17.     }

  18.     public void setId(String id) {
  19.         this.id = id;
  20.     }

  21.     public String getName() {
  22.         return name;
  23.     }

  24.     public void setName(String name) {
  25.         this.name = name;
  26.     }

  27.     public String getAge() {
  28.         return age;
  29.     }

  30.     public void setAge(String age) {
  31.         this.age = age;
  32.     }
  33. }
复制代码



自定义适配器PersonAdapter
  1. package com.ljq.ls;

  2. import java.util.List;

  3. import com.ljq.domain.Person;

  4. import android.content.Context;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8. import android.widget.ArrayAdapter;
  9. import android.widget.TextView;
  10. /**
  11. * ListView加载adapter的过程

  12. * 1、先判断adapter有多少数据项,根据这个数据确定有多少个item

  13. * 2、确定每个item里加载哪个view

  14. * 3、在view里加载要显示的数据

  15. * @author jiqinlin
  16. *
  17. */
  18. public class PersonAdapter extends ArrayAdapter{
  19.     private LayoutInflater layoutInflater = null;
  20.     private List<Person> persons;

  21.     public PersonAdapter(Context context, int textViewResourceId, List objects) {
  22.         super(context, textViewResourceId, objects);
  23.         layoutInflater = LayoutInflater.from(context);
  24.         persons = objects;
  25.     }
  26.     
  27.     /**
  28.      * 获取adapter里有多少个数据项
  29.      */
  30.     @Override
  31.     public int getCount() {
  32.         return persons.size();
  33.     }

  34.     @Override
  35.     public Object getItem(int position) {
  36.         return persons.get(position);
  37.     }
  38.     
  39.     @Override
  40.     public long getItemId(int position) {
  41.         return position;
  42.     } 
  43.     
  44.     /**
  45.      * 创建显示的数据界面
  46.      * 
  47.      * Adapter的作用就是ListView界面与数据之间的桥梁,
  48.      * 当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。
  49.      * 想过没有? 在我们的列表有1000000项时会是什么样的?是不是会占用极大的系统资源?
  50.      */
  51.     @Override
  52.     public View getView(int position, View convertView, ViewGroup parent) {
  53.         /*
  54.         // 优化前
  55.         ViewHolder holder = new ViewHolder();
  56.         convertView = layoutInflater.inflate(R.layout.main, null);
  57.         holder.id = (TextView)convertView.findViewById(R.id.id);
  58.         holder.name = (TextView)convertView.findViewById(R.id.name);
  59.         holder.age = (TextView)convertView.findViewById(R.id.age);
  60.         convertView.setTag(holder);
  61.         
  62.         holder.id.setText(persons.get(position).getId());
  63.         holder.name.setText(persons.get(position).getName());
  64.         holder.age.setText(persons.get(position).getAge());
  65.         return convertView;
  66.         */
  67.         
  68.         // 优化后
  69.         ViewHolder holder;
  70.         if(convertView == null){
  71.             convertView = layoutInflater.inflate(R.layout.main, null);
  72.             holder = new ViewHolder();
  73.             holder.id = (TextView)convertView.findViewById(R.id.id);
  74.             holder.name = (TextView)convertView.findViewById(R.id.name);
  75.             holder.age = (TextView)convertView.findViewById(R.id.age);
  76.             convertView.setTag(holder);
  77.         }else{
  78.             holder = (ViewHolder)convertView.getTag();
  79.         }
  80.         
  81.         holder.id.setText(persons.get(position).getId());
  82.         holder.name.setText(persons.get(position).getName());
  83.         holder.age.setText(persons.get(position).getAge());
  84.         return convertView;
  85.     }
  86.     
  87.     /**
  88.      * 界面上的显示控件
  89.      * 
  90.      * @author jiqinlin
  91.      *
  92.      */
  93.     private static class ViewHolder{
  94.         private TextView id;
  95.         private TextView name;
  96.         private TextView age;
  97.     }
  98.     

  99. }
复制代码



类LsActivity
  1. package com.ljq.ls;

  2. import java.util.ArrayList;

  3. import android.app.ListActivity;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.widget.ListView;
  7. import android.widget.Toast;

  8. import com.ljq.domain.Person;

  9. public class LsActivity extends ListActivity {
  10.     private ArrayList<Person> persons = new ArrayList<Person>();
  11.     private PersonAdapter personAdapter = null;
  12.     
  13.     @Override
  14.     public void onCreate(Bundle savedInstanceState) {
  15.         super.onCreate(savedInstanceState);
  16.         
  17.         initData();
  18.         personAdapter =new PersonAdapter(LsActivity.this, R.layout.main, persons);
  19.         setListAdapter(personAdapter);
  20.         registerForContextMenu(getListView());
  21.     }
  22.     
  23.     @Override
  24.     protected void onListItemClick(ListView l, View v, int position, long id) {
  25.         super.onListItemClick(l, v, position, id);
  26.         Person person = persons.get(position);
  27.         Toast.makeText(LsActivity.this, person.getId()+":"+person.getName()
  28.                 +":"+person.getAge(), Toast.LENGTH_LONG).show();
  29.         return;
  30.     }

  31.     private void initData(){
  32.         persons.add(new Person("序号", "姓名", "年龄"));
  33.         persons.add(new Person("1", "ljq1", "20"));
  34.         persons.add(new Person("2", "ljq2", "20"));
  35.         persons.add(new Person("3", "ljq3", "20"));
  36.         persons.add(new Person("4", "ljq4", "20"));
  37.         persons.add(new Person("5", "ljq5", "20"));
  38.         persons.add(new Person("6", "ljq6", "20"));
  39.         persons.add(new Person("7", "ljq7", "20"));
  40.         persons.add(new Person("8", "ljq8", "20"));
  41.         persons.add(new Person("9", "ljq9", "20"));
  42.     }
  43. }
复制代码



运行结果
Android控件中ListView详解 - NedLees - NedLees的博客
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值