小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Android系列教程之八:ListView組件的使用

 漢江秋月夜 2014-01-20

一、 不使用 xml 布局文件創(chuàng)建一個(gè) ListView

  1. 創(chuàng)建一個(gè)名稱為 HelloListView Android 工程,可以參見 Android教程之三:第一個(gè)Android應(yīng)用,HelloWorld 。
  2. 要使用 ListView ,需要讓你的 Activity 繼承于 ListActivity ,這個(gè)和以前的有區(qū)別,以前的都是繼承 Activity ,該 ListActivity 繼承 Activity ,擴(kuò)展了很多常用的用于操作 ListView 的方法,使用很方便。
  3. 現(xiàn)修改 HelloListView 類如下 :
    Java代碼  收藏代碼
    1. public class HelloListView extends ListActivity {  
    2.     /** Called when the activity is first created. */  
    3.     @Override  
    4.     public void onCreate(Bundle savedInstanceState) {  
    5.         super.onCreate(savedInstanceState);  
    6.         //setContentView(R.layout.main);  
    7.         //設(shè)置一個(gè)Adapter  
    8.         setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,COUNTRIES));  
    9.     }  
    10.     //數(shù)據(jù)數(shù)據(jù)  
    11.     private  static final String[] COUNTRIES=new String[]{"中國","俄羅斯","英國","法國"};  
    12. }  
  4. 運(yùn)行程序效果如下:

     看到了吧,我們的數(shù)據(jù)已經(jīng)通過列表的形式顯示了出來?。?!

    這里主要的是使用了一個(gè) Adapter— 適配器,你可以把他看成是 ListView 的數(shù)據(jù)源, ListView 要展示的數(shù)據(jù)都是已 Adapter 的形勢(shì)傳遞給 ListView 的。這個(gè) Adapter 很重要, Android 的用于傳給集合控件( ListView,Spinner,GridView 等)的數(shù)據(jù)都是以 Adapter 的形勢(shì),這樣的好處就是只要掌握了 Adapter ,就可以很隨意的給這些集合控制傳遞數(shù)據(jù),因?yàn)樗麄兪褂玫亩际?/span> Adapter 。適配器適配器關(guān)鍵就是適配,只需公布一個(gè) Adapter ,就全搞定了。 Android 已經(jīng)給我們實(shí)現(xiàn)了一些常用的適配器,如剛剛使用的數(shù)組適配器,還有簡單適配器等 , 如果這些不能滿足,我們還可以通過自定義適配器來實(shí)現(xiàn)自己的適配器。其實(shí)一種適配器就對(duì)應(yīng)了一個(gè)集合控件中的一個(gè)元素的布局展示。

二: 使用 xml 來自定義 ListView

  1. 上個(gè)例子我們并沒有使用在 main.xml 中定義一個(gè) ListView 的形勢(shì)來布局 ListView ,而是使用的 ListActivity 中默認(rèn)的 ListView 來演示的。
  2. 下面就使用我們?cè)?/span> main.xml 中自定義的 ListView, 這樣我們可以很方便的控制 ListView 展示的布局,大小,背景色等屬性。當(dāng)然上個(gè)例子中我們一樣可以通過 getListView 獲取 ListView 后使用它的方法來改變布局、大小和背景色等。
  3. 修改 main.xml 為:
    Xml代碼  收藏代碼
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <ListView xmlns:android="http://schemas./apk/res/android"  
    3.     android:id="@android:id/list"  
    4.     android:layout_width="fill_parent"  
    5.     android:layout_height="fill_parent"  
    6.     android:background="#FF0000FF"  
    7.     >  
    8. </ListView>  
     這里要注意的是我們?cè)O(shè)置 ListView id ”@android:id/list”, 意思是我們引用 Android 已經(jīng)為我們定義好的一個(gè) id ,名字是 list ,如果你不定義成這樣,這個(gè) ListView 是不能被 ListActivity 識(shí)別的。然后就是添加了一個(gè)藍(lán)色的背景,看看我們這個(gè)自定義的 ListView 是否起了作用。
  4. 修改 HelloListView 類為:
    Java代碼  收藏代碼
    1. public class HelloListView extends ListActivity {  
    2.     /** Called when the activity is first created. */  
    3.     @Override  
    4.     public void onCreate(Bundle savedInstanceState) {  
    5.         super.onCreate(savedInstanceState);  
    6.         setContentView(R.layout.main);  
    7.         //設(shè)置一個(gè)Adapter  
    8.         setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,COUNTRIES));  
    9.     }  
    10.     //數(shù)據(jù)數(shù)據(jù)  
    11.     private  static final String[] COUNTRIES=new String[]{"中國","俄羅斯","英國","法國"};  
    12. }  
     比上個(gè)例子只是多了 setContentView(R.layout. main ); 是為了讓 Android 識(shí)別我們定義的 ListView 。
  5. 運(yùn)行效果圖:

     背景已經(jīng)變成了藍(lán)色,說明我們?cè)趚ml中定義的ListView起作用了。

三: 自定義要展示的元素

  1. 前面的兩個(gè)例子都是展示一行文字,如果我們想圖文混排怎么做呢,比如前面是文字,后面是圖片。要實(shí)現(xiàn)這種功能就需要我們自定義 Adapter 啦。
  2. 新建布局文件 item.xml, 內(nèi)容如下:
    Xml代碼  收藏代碼
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <RelativeLayout  
    3.   xmlns:android="http://schemas./apk/res/android"  
    4.   android:layout_width="fill_parent"  
    5.   android:layout_height="wrap_content">  
    6.   <TextView    
    7.     android:id="@+id/text"  
    8.     android:layout_alignParentLeft="true"  
    9.     android:layout_width="wrap_content"  
    10.     android:layout_height="wrap_content"/>  
    11.   <ImageView   
    12.     android:id="@+id/image"  
    13.     android:layout_alignParentRight="true"  
    14.     android:layout_width="wrap_content"  
    15.     android:layout_height="wrap_content"/>  
    16. </RelativeLayout>  

    這里主要定義一個(gè) TextView 和一個(gè) ImageView ,用于顯示列表每一行的文本和圖片

  3. 修改 HelloListView 類如下:
    Java代碼  收藏代碼
    1. public class HelloListView extends ListActivity {  
    2.     /** Called when the activity is first created. */  
    3.     @Override  
    4.     public void onCreate(Bundle savedInstanceState) {  
    5.         super.onCreate(savedInstanceState);  
    6.         setContentView(R.layout.main);  
    7.         //設(shè)置一個(gè)Adapter,使用自定義的Adapter  
    8.         setListAdapter(new TextImageAdapter(this));  
    9.     }  
    10.     /** 
    11.      * 自定義視圖 
    12.      * @author 飛雪無情 
    13.      * 
    14.      */  
    15.     private class TextImageAdapter extends BaseAdapter{  
    16.         private Context mContext;  
    17.         public TextImageAdapter(Context context) {  
    18.             this.mContext=context;  
    19.         }  
    20.         /** 
    21.          * 元素的個(gè)數(shù) 
    22.          */  
    23.         public int getCount() {  
    24.             return texts.length;  
    25.         }  
    26.   
    27.         public Object getItem(int position) {  
    28.             return null;  
    29.         }  
    30.   
    31.         public long getItemId(int position) {  
    32.             return 0;  
    33.         }  
    34.         //用以生成在ListView中展示的一個(gè)個(gè)元素View  
    35.         public View getView(int position, View convertView, ViewGroup parent) {  
    36.             //優(yōu)化ListView  
    37.             if(convertView==null){  
    38.                 convertView=LayoutInflater.from(mContext).inflate(R.layout.item, null);  
    39.                 ItemViewCache viewCache=new ItemViewCache();  
    40.                 viewCache.mTextView=(TextView)convertView.findViewById(R.id.text);  
    41.                 viewCache.mImageView=(ImageView)convertView.findViewById(R.id.image);  
    42.                 convertView.setTag(viewCache);  
    43.             }  
    44.             ItemViewCache cache=(ItemViewCache)convertView.getTag();  
    45.             //設(shè)置文本和圖片,然后返回這個(gè)View,用于ListView的Item的展示  
    46.             cache.mTextView.setText(texts[position]);  
    47.             cache.mImageView.setImageResource(images[position]);  
    48.             return convertView;  
    49.         }  
    50.     }  
    51.     //元素的緩沖類,用于優(yōu)化ListView  
    52.     private static class ItemViewCache{  
    53.         public TextView mTextView;  
    54.         public ImageView mImageView;  
    55.     }  
    56.   //展示的文字  
    57.     private  String[] texts=new String[]{"天氣","我團(tuán)","背景"};  
    58.     //展示的圖片  
    59.     private int[] images=new int[]{R.drawable.img1,R.drawable.img2,R.drawable.img3};  
    60. }  
    這里的主要地方是自定義了一個(gè) Adapter ,我們只需要繼承 BaseAdapter 即可, BaseAdapter 已經(jīng)實(shí)現(xiàn)了 Adapter 的大部分方法,我們繼承后只需要實(shí)現(xiàn)部分的方法即可。必須實(shí)現(xiàn)的就是 getCount getView 方法,前一個(gè)是返回 ListView 中有多少個(gè)元素,后一個(gè)是生成要展示的 View 。 ListView 在每添加一個(gè) View 是就會(huì)調(diào)用 Adapter getView 方法,所以我們有必要對(duì)這個(gè)方法做優(yōu)化,例子中就做了部分的優(yōu)化,一般面試的時(shí)候會(huì)被問到 ListView 優(yōu)化,回答例子中的這些代碼就差不多了。
  4. 運(yùn)行,我們會(huì)看到效果如圖:

     

四、ListView 列表中的元素的單擊事件響應(yīng)

  1. 如果我們要想單擊一個(gè) ListView 的元素使其作出相應(yīng)的響應(yīng)怎么辦呢?比如彈出什么,打開什么,展示什么等等,那么我們只需要實(shí)現(xiàn)單擊事件的函數(shù)既可。

  2. 要實(shí)現(xiàn) ListView 的單擊事件有兩種方法,一個(gè)是使用 getListView().setOnClickListener(l ); 設(shè)置,這個(gè)和平時(shí)我們用的控件設(shè)置是一樣的,不做介紹,下面介紹第二個(gè),就是重寫 ListActivity onListItemClick 方法,其實(shí)這個(gè)的最后處理也是 ListView setOnClickListener 進(jìn)行監(jiān)聽調(diào)用的。

  3. HelloListView 類中增加如下代碼:

    Java代碼  收藏代碼
    1. @Override  
    2. protected void onListItemClick(ListView l, View v, int position, long id) {  
    3.         Toast.makeText(this"你單擊了"+texts[position], Toast.LENGTH_SHORT).show();  
  4. 運(yùn)行單擊其中的一行效果如下圖:

五、小結(jié)

到這里L(fēng)istView應(yīng)該算是會(huì)使用了,起碼常用的功能會(huì)的,當(dāng)然還有很多沒有說到的,比如ListView的分割部分,headView和footView以及ListView的分頁等等,這些就需要我們自己下去好好摸索了。

13
0
分享到:

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多