2011年7月13日 星期三

自訂ListView Item

在ListView,要用自訂item樣式,
通常在Android內,我們需要以ListView顯示資料列表
列表內item的樣式可以直接使用android內建的item樣式
例如R.android.layout.simple_list_item_1
但如果希望使用自行設計的item樣式,可以透過自訂Adpater來做
以下是設計流程

1.設計Item layout XML
要顯示的itemㄝ,以一個layout 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="wrap_content"  
           android:orientation="horizontal">  
           <ImageView android:id="@+id/item_img"  
                android:layout_width="60dp"   
                android:layout_height="60dp"/>                 
           <TextView   
                android:layout_width="wrap_content" android:layout_height="wrap_content"            
                android:id="@+id/item_title" />  
      </LinearLayout>       
2.自訂Adapter
透過自行設計的Adapter將資料與item xml結合顯示
1.extends BaseAdapter
2.在建構子內設定希望傳入的各項資料欄位
public MyAdapter(Context context,String[] title,String[] img){
  inflater = LayoutInflater.from(context);
  item_title=title;
  item_img=img;
}
3.在Adapter內改寫getView()
透過getView取得的position當index
再由建構子取得的資料array內得到各item所要顯示的資料
將這item資料帶到view內
@Override
public View getView(int position, View convertView, ViewGroup parent) {
   //--將item xml轉成view物件,並取得item內各項元件的view 
   convertView = inflater.inflate(R.layout.list_item,null);
   TextView title_view=(TextView)convertView.findViewById(R.id.item_title); 
   title_view.setText(item_title[position].toString());  

   ImageView img_view=(ImageView)convertView.findViewById(R.id.item_img);
   Drawable drawable = LoadImageFromWeb(item_img[position]);
   img_view.setImageDrawable(drawable);  

   return convertView;  
}
4.顯示ListView
要顯示ListVIew的Activity可以直接繼承ListActivity
繼承自ListActivity即已包含了一個list view在裡面
public class PushActivity extends ListActivity {
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);        
      //---set List View---- 
      ListView lv=getListView();       
      LayoutInflater inflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);       
      //--Add Data--------------------
      String[] songData=getResources().getStringArray(R.array.songdata_holder);
      String[] songImg=getResources().getStringArray(R.array.songimg_holder);
      MyAdapter adapter = new MyAdapter(this,songData,songImg);        
      setListAdapter(adapter);
    } 
}

沒有留言: