免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

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

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

  1. 創(chuàng)建一個名稱為HelloListViewAndroid工程,可以參見Android教程之三:第一個Android應用,HelloWorld
  2. 要使用ListView,需要讓你的Activity繼承于ListActivity,這個和以前的有區(qū)別,以前的都是繼承Activity,該ListActivity繼承Activity,擴展了很多常用的用于操作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è)置一個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. 運行程序效果如下:

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

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

二:使用xml來自定義ListView

  1. 上個例子我們并沒有使用在main.xml中定義一個ListView的形勢來布局ListView,而是使用的ListActivity中默認的ListView來演示的。
  2. 下面就使用我們在main.xml中自定義的ListView,這樣我們可以很方便的控制ListView展示的布局,大小,背景色等屬性。當然上個例子中我們一樣可以通過getListView獲取ListView后使用它的方法來改變布局、大小和背景色等。
  3. 修改main.xml為:
    Xml代碼  
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <ListView xmlns:android="http://schemas.android.com/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>  
     這里要注意的是我們設(shè)置ListViewid”@android:id/list”,意思是我們引用Android已經(jīng)為我們定義好的一個id,名字是list,如果你不定義成這樣,這個ListView是不能被ListActivity識別的。然后就是添加了一個藍色的背景,看看我們這個自定義的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è)置一個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. }  
     比上個例子只是多了setContentView(R.layout.main);是為了讓Android識別我們定義的ListView。
  5. 運行效果圖:

     背景已經(jīng)變成了藍色,說明我們在xml中定義的ListView起作用了。

三:自定義要展示的元素

  1. 前面的兩個例子都是展示一行文字,如果我們想圖文混排怎么做呢,比如前面是文字,后面是圖片。要實現(xiàn)這種功能就需要我們自定義Adapter啦。
  2. 新建布局文件item.xml,內(nèi)容如下:
    Xml代碼  
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <RelativeLayout  
    3.   xmlns:android="http://schemas.android.com/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>  

    這里主要定義一個TextView和一個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è)置一個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.          * 元素的個數(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中展示的一個個元素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è)置文本和圖片,然后返回這個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[]{"天氣","我團","背景"};  
    58.     //展示的圖片  
    59.     private int[] images=new int[]{R.drawable.img1,R.drawable.img2,R.drawable.img3};  
    60. }  
    這里的主要地方是自定義了一個Adapter,我們只需要繼承BaseAdapter即可,BaseAdapter已經(jīng)實現(xiàn)了Adapter的大部分方法,我們繼承后只需要實現(xiàn)部分的方法即可。必須實現(xiàn)的就是getCountgetView方法,前一個是返回ListView中有多少個元素,后一個是生成要展示的View。ListView在每添加一個View是就會調(diào)用AdaptergetView方法,所以我們有必要對這個方法做優(yōu)化,例子中就做了部分的優(yōu)化,一般面試的時候會被問到ListView優(yōu)化,回答例子中的這些代碼就差不多了。
  4. 運行,我們會看到效果如圖:

     

四、ListView列表中的元素的單擊事件響應

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

  2. 要實現(xiàn)ListView的單擊事件有兩種方法,一個是使用getListView().setOnClickListener(l);設(shè)置,這個和平時我們用的控件設(shè)置是一樣的,不做介紹,下面介紹第二個,就是重寫ListActivityonListItemClick方法,其實這個的最后處理也是ListViewsetOnClickListener進行監(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. 運行單擊其中的一行效果如下圖:

五、小結(jié)

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

13
0
分享到:
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
四種方案解決ScrollView嵌套ListView問題
ListView與Adapter使用要點
Android中Adapter之ArrayAdapter使用
Android ListActivity實現(xiàn)遍歷文件列表,查看文檔類文件
ListView 使用 ViewHolder
Android學習筆記(十一):Activity
更多類似文章 >>
生活服務
分享 收藏 導長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服