Android ListView例子詳解

來源:互聯網
上載者:User

三種實現方法,由淺入深。這中間要注意Adapter的用法,其實你要是看過Android的文檔,你會發現有很多Adapter,

如果你還不太清楚適配器模式,可以先補補這方面的知識。在實際工作中,設計模式是個很好的幫手。

兩個layout檔案:

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" >    <TextView        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="@string/hello" />        <ListView         android:id="@+id/listview"        android:layout_width="match_parent"        android:layout_height="match_parent"        ></ListView></LinearLayout>

listview.xml

<?xml version="1.0" encoding="utf-8"?>  <LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/linerlayout1"    android:orientation="vertical"    android:layout_height="fill_parent"    android:layout_width="fill_parent"    >       <TextView          android:id="@+id/person_name"          android:textSize="23sp"          android:layout_width="wrap_content"          android:layout_height="wrap_content"       />       <TextView          android:id="@+id/person_age"          android:layout_width="wrap_content"          android:layout_height="wrap_content"      />      <TextView          android:id="@+id/person_email"          android:layout_width="wrap_content"          android:layout_height="wrap_content"      />      <TextView          android:id="@+id/person_address"          android:layout_width="wrap_content"          android:layout_height="wrap_content"      />  </LinearLayout>  

Activity:LincListViewActivity.java

package com.linc.listview;import android.app.Activity;import android.os.Bundle;import android.widget.ArrayAdapter;import android.widget.ListView;public class LincListViewActivity extends Activity {private final static String[] data = {"張飛","張遼","張角","張三丰","張牙舞爪","張燈結綵","張唑啉","張大民"};//建立資料來源.      Zhang[] data2 = new Zhang[]{          new Zhang("張飛",38,"zhangfei@gmail.com","燕山"),          new Zhang("張遼",36,"zhangliao@sina.com","雁門"),          new Zhang("張角",51,"zhangjiao@gmail.com","钜鹿"),          new Zhang("張三丰",200,"sanfeng@gmail.com","遼東"),          new Zhang("張牙舞爪",25,"5zhao@gmail.com","冀州"),        new Zhang("張燈結綵",25,"5zhao@gmail.com","冀州") ,        new Zhang("張唑啉",25,"5zhao@gmail.com","冀州") ,        new Zhang("張大民",25,"5zhao@gmail.com","冀州") ,        new Zhang("張牙舞爪",25,"5zhao@gmail.com","冀州")      };      /** Called when the activity is first created. */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                ListView listview = (ListView)findViewById(R.id.listview);        /*         * 第一種:一般字元串         */        ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this,         android.R.layout.simple_list_item_1,data);                /*         * 第二種:文藝類對象         */        ArrayAdapter<Zhang> adapter2 = new ArrayAdapter<Zhang>(this,         android.R.layout.simple_list_item_1,data2);                /*         * 第三種:自訂配接器         */        ListAdapter adapter3 = new ListAdapter(this, R.layout.listview,data2) ;                listview.setAdapter(adapter3);    }}

資料類對象:Zhang.java

package com.linc.listview;public class Zhang {           private String name;      private int age;      private String email;      private String address;      public String getName() {return name;}public int getAge() {return age;}public String getEmail() {return email;}public String getAddress() {return address;}       public Zhang(String name, int age, String email, String address) {          super();          this.name = name;          this.age = age;          this.email = email;          this.address = address;      }         @Override      public String toString() {          return "Person [name=" + name + ", age=" + age + ", email=" + email                  + ", address=" + address + "]";      }     }  

適配器類:ListAdapter.java

package com.linc.listview;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ArrayAdapter;import android.widget.TextView;public class ListAdapter extends ArrayAdapter<Zhang> {private LayoutInflater mInflater; public ListAdapter(Context context, int textViewResourceId,Zhang[] obj) {super(context, textViewResourceId,obj);// TODO Auto-generated constructor stubthis.mInflater = LayoutInflater.from(context);}@Override    public View getView(int position, View convertView, ViewGroup parent) {if(convertView == null){              //建立新的view視圖.              convertView = mInflater.inflate(R.layout.listview, null);          }                    ViewHolder holder = null;          if(holder==null){              holder = new ViewHolder();              //尋找每個ViewItem中,各個子View,放進holder中              holder.name = (TextView) convertView.findViewById(R.id.person_name);              holder.age = (TextView) convertView.findViewById(R.id.person_age);              holder.email = (TextView) convertView.findViewById(R.id.person_email);              holder.address = (TextView) convertView.findViewById(R.id.person_address);              //儲存對每個顯示的ViewItem中, 各個子View的引用對象              convertView.setTag(holder);          }        else        {        holder = (ViewHolder)convertView.getTag();         }                  //擷取當前要顯示的資料          Zhang person = getItem(position);            holder.name.setText(person.getName());          holder.age.setText(String.valueOf(person.getAge()));          holder.email.setText(person.getEmail());          holder.address.setText(person.getAddress());          return convertView;    }    private static class ViewHolder{TextView name;          TextView age;          TextView email;          TextView address;}}

更複雜的一個例子:單行與多行並存

還可以參考:View Tag的介紹

或者對比著GridView來學習一下它們的異同,Android自訂GridView之實現一個圖片加多個文字框

它們的Adapter一個是繼承自ArrayAdapter,另一個是BaseAdapter。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.