<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    風人園

    弱水三千,只取一瓢,便能解渴;佛法無邊,奉行一法,便能得益。
    隨筆 - 99, 文章 - 181, 評論 - 56, 引用 - 0
    數據加載中……

    Android 自定義ListView adapter(zt)

    http://daoshud1.iteye.com/blog/1874241

    本文講實現一個自定義列表的Android程序,程序將實現一個使用自定義的適配器(Adapter)綁定 
    數據,通過contextView.setTag綁定數據有按鈕的ListView。 
    系統顯示列表(ListView)時,首先會實例化一個適配器,本文將實例化一個自定義的適配器。實現 
    自定義適配器,必須手動映射數據,這時就需要重寫getView()方法,系統在繪制列表的每一行的時候 
    將調用此方法。 
    ListView在開始繪制的時候,系統自動調用getCount()函數,根據函數返回值得到ListView的長度, 
    然后根據這個長度,調用getView()逐一畫出每一行。 
    具體使用方法可以參考下面代碼,只需記住Android自定義ListView三步驟: 
    第一步:準備主布局文件、組件布局文件等 
    第二步:獲取并整理數據 
    第三部:綁定數據,這里我們是通過自己編寫Adapter類來完成的 
    1.首先新建一個list.XML 
    Java代碼  收藏代碼
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:layout_width="match_parent"  
    4.     android:layout_height="match_parent"  
    5.     android:orientation="vertical" >  
    6.     <LinearLayout android:layout_width="match_parent"  
    7.         android:layout_height="match_parent"  
    8.         android:orientation="horizontal" android:background="#f1e4f1">  
    9.         <ImageView   
    10.             android:id="@+id/image"  
    11.             android:layout_width="wrap_content"  
    12.             android:layout_height="wrap_content"/>  
    13.         <TextView   
    14.             android:id="@+id/title"  
    15.             android:layout_width="wrap_content"  
    16.             android:layout_height="wrap_content"  
    17.             android:textColor="#666872"/>  
    18.         <Button   
    19.             android:id="@+id/view"  
    20.             android:layout_width="wrap_content"  
    21.             android:layout_height="wrap_content"  
    22.             android:text="詳細"/>  
    23.     </LinearLayout>  
    24.     <TextView   
    25.         android:id="@+id/info"  
    26.         android:layout_width="wrap_content"  
    27.         android:layout_height="wrap_content"  
    28.         android:textColor="#666872"/>  
    29. </LinearLayout>  

    2、新建一個適配器類MyAdspter.java 
    Java代碼  收藏代碼
    1. public class MyAdspter extends BaseAdapter {  
    2.   
    3.     private List<Map<String, Object>> data;  
    4.     private LayoutInflater layoutInflater;  
    5.     private Context context;  
    6.     public MyAdspter(Context context,List<Map<String, Object>> data){  
    7.         this.context=context;  
    8.         this.data=data;  
    9.         this.layoutInflater=LayoutInflater.from(context);  
    10.     }  
    11.     /** 
    12.      * 組件集合,對應list.xml中的控件 
    13.      * @author Administrator 
    14.      */  
    15.     public final class Zujian{  
    16.         public ImageView image;  
    17.         public TextView title;  
    18.         public Button view;  
    19.         public TextView info;  
    20.     }  
    21.     @Override  
    22.     public int getCount() {  
    23.         return data.size();  
    24.     }  
    25.     /** 
    26.      * 獲得某一位置的數據 
    27.      */  
    28.     @Override  
    29.     public Object getItem(int position) {  
    30.         return data.get(position);  
    31.     }  
    32.     /** 
    33.      * 獲得唯一標識 
    34.      */  
    35.     @Override  
    36.     public long getItemId(int position) {  
    37.         return position;  
    38.     }  
    39.   
    40.     @Override  
    41.     public View getView(int position, View convertView, ViewGroup parent) {  
    42.         Zujian zujian=null;  
    43.         if(convertView==null){  
    44.             zujian=new Zujian();  
    45.             //獲得組件,實例化組件  
    46.             convertView=layoutInflater.inflate(R.layout.list, null);  
    47.             zujian.image=(ImageView)convertView.findViewById(R.id.image);  
    48.             zujian.title=(TextView)convertView.findViewById(R.id.title);  
    49.             zujian.view=(Button)convertView.findViewById(R.id.view);  
    50.             zujian.info=(TextView)convertView.findViewById(R.id.info);  
    51.             convertView.setTag(zujian);  
    52.         }else{  
    53.             zujian=(Zujian)convertView.getTag();  
    54.         }  
    55.         //綁定數據  
    56.         zujian.image.setBackgroundResource((Integer)data.get(position).get("image"));  
    57.         zujian.title.setText((String)data.get(position).get("title"));  
    58.         zujian.info.setText((String)data.get(position).get("info"));  
    59.         return convertView;  
    60.     }  
    61.   
    62. }  

    關于上面LayoutInflater的使用:在實際開發種LayoutInflater這個類還是非常有用的。它的作用類似 
    于 findViewById(),不同點是LayoutInflater是用來找layout下xml布局文件,并且會實例化!。 
    getView()的三個參數:position表示將顯示的是第幾行,covertView是從布局文件中inflate來的布 
    局。我們用LayoutInflater的方法將定義好的list.xml文件提取成View實例用來顯示。然后將xml文件 
    中的各個組件實例化,這樣便可以將數據對應到各個組件上了。但是按鈕為了響應點擊事件,需要為 
    它添加點擊監聽器,這樣就能捕獲點擊事件。 
    3、activity_main.xml中添加ListView控件 
    Java代碼  收藏代碼
    1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    2.     xmlns:tools="http://schemas.android.com/tools"  
    3.     android:layout_width="match_parent"  
    4.     android:layout_height="match_parent"  
    5.     android:paddingBottom="@dimen/activity_vertical_margin"  
    6.     android:paddingLeft="@dimen/activity_horizontal_margin"  
    7.     android:paddingRight="@dimen/activity_horizontal_margin"  
    8.     android:paddingTop="@dimen/activity_vertical_margin"  
    9.     tools:context=".MainActivity" >  
    10.     <ListView   
    11.         android:id="@+id/list"  
    12.         android:layout_width="fill_parent"  
    13.         android:layout_height="fill_parent"></ListView>  
    14. </RelativeLayout>  

    4、在activity中調用ListView 
    Java代碼  收藏代碼
    1. public class MainActivity extends Activity {  
    2.   
    3.     private ListView listView=null;   
    4.     @Override  
    5.     protected void onCreate(Bundle savedInstanceState) {  
    6.         super.onCreate(savedInstanceState);  
    7.         setContentView(R.layout.activity_main);  
    8.         listView=(ListView)findViewById(R.id.list);  
    9.         List<Map<String, Object>> list=getData();  
    10.         listView.setAdapter(new MyAdspter(this, list));  
    11.     }  
    12.     @Override  
    13.     public boolean onCreateOptionsMenu(Menu menu) {  
    14.         getMenuInflater().inflate(R.menu.main, menu);  
    15.         return true;  
    16.     }  
    17.   
    18.     public List<Map<String, Object>> getData(){  
    19.         List<Map<String, Object>> list=new ArrayList<Map<String,Object>>();  
    20.         for (int i = 0; i < 10; i++) {  
    21.             Map<String, Object> map=new HashMap<String, Object>();  
    22.             map.put("image", R.drawable.ic_launcher);  
    23.             map.put("title""這是一個標題"+i);  
    24.             map.put("info""這是一個詳細信息"+i);  
    25.             list.add(map);  
    26.         }  
    27.         return list;  
    28.     }  
    29. }  


    posted on 2016-12-01 13:13 風人園 閱讀(166) 評論(0)  編輯  收藏 所屬分類: Android

    主站蜘蛛池模板: 亚洲国产最大av| 久久精品一区二区免费看| 1区2区3区产品乱码免费| 免费国产成人午夜私人影视| 亚洲精品综合一二三区在线| 黄色免费网址大全| 青青草免费在线视频| 亚洲AV综合色区无码一区爱AV| 日韩色日韩视频亚洲网站| 国产国产人免费视频成69堂| 国产AV无码专区亚洲Av| 曰批全过程免费视频免费看| 性色av无码免费一区二区三区| 亚洲精品高清国产一久久| 中文字幕不卡高清免费| 国产伦精品一区二区三区免费下载| 亚洲小说区图片区| 国产一区二区免费视频| 亚洲视频人成在线播放| 激情无码亚洲一区二区三区 | 午夜网站在线观看免费完整高清观看| 四只虎免费永久观看| 国产99在线|亚洲| 98精品全国免费观看视频| 亚洲色婷婷综合久久| 黄色三级三级免费看| 日韩视频免费在线| 亚洲一区在线观看视频| 57pao国产成视频免费播放| 亚洲国产精品一区二区第一页| 精品一区二区三区高清免费观看| 四虎永久在线精品免费观看地址| 亚洲精品蜜夜内射| 亚洲中文无码永久免费| 久久精品国产亚洲AV蜜臀色欲| 最近2019中文字幕免费大全5 | aa毛片免费全部播放完整| 亚洲国产精品不卡毛片a在线| 亚洲成在人线aⅴ免费毛片| 成人性生免费视频| 亚洲av成人一区二区三区|