首先先準備兩個Layout XML檔
1.要顯示ListView的Layout--------------------------------------------------------------
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/listView" />
</LinearLayout>
2.ListView裡面每一個item的排版Layout-------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@drawable/listview_back"
>
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignBottom="@+id/textView_context"
android:src="@drawable/person_default" />
<TextView
android:id="@+id/textView_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/imageView1"
android:text="Name"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/textView_phone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView_name"
android:layout_below="@+id/textView_name"
android:text="PhoneNumber"
android:textAppearance="?android:attr/textAppearanceMedium" />
<TextView
android:id="@+id/textView_address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView_phone"
android:layout_below="@+id/textView_phone"
android:text="Address"
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/textView_context"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/textView_address"
android:layout_below="@+id/textView_address"
android:text="OrderInfo"
android:textAppearance="?android:attr/textAppearanceSmall" />
</RelativeLayout>
3.再來就是Activity的部分--------------------------------------------------------
a.準備陣列
你上面第二個Layout(ListView item 用的 Layout)
裡面有幾個元件 你就要準備幾個陣列
如上來說 裡面總共有5個元件 (1個ImageView 4個TextView)
那我們Activity裡要先準備
1個 int[] (ImageView用的) 內容舉例 : int[] image = {R.drawable.image1,R.drawable.image2.......}
4個 String[] (TextView用的) 內容舉例 : String[] name = {"Mazs","Louis","Mary"......}
b.設定List<Map<String, Object>> ,用for 把item put進去 item.put(代表的標籤,所對應陣列),for跑的次數是ListView 的 item數
List<Map<String, Object>> items = new ArrayList<Map<String, Object>>(); for (int i = 0; i < image.length; i++) { Map item = new HashMap(); item.put("image", image[i]); item.put("name", name[i]); item.put("phone", phone[i]); item.put("address", address[i]); item.put("orderInfo", orderInfo[i]); items.add(item); }
c.將b的List 設定進 SimpleAdapter, 格式是 :
new SimpleAdapter(目前的Activity , 第b點的List , 上面所定義給ListView item的Layout , 第b點List所用的標籤的陣列 , 元件依序排列的int陣列)
SimpleAdapter simpleAdapter = new SimpleAdapter(this, items, R.layout.search_listview, new String[]{"image", "name","phone","address","orderInfo"}, new int[]{R.id.imageView1, R.id.textView_name,R.id.textView_phone,R.id.textView_address,R.id.textView_context});
d.最後一步 將simpleAdapter set進 ListView裡
listView1.setAdapter(simpleAdapter);
重點來了 如果你的需求是按下ListView的Item時或類似的行為時 要控制裡面的元件的話 那就要自定義Adapter 不會很複雜 你只要覆寫裡面的建構子 跟 getView方法就好
主程式:
ListViewItemAdapter simpleAdapter = new ListViewItemAdapter(model_select.this, items, R.layout.model_select_listview_item, new String[]{"image","name"}, new int[]{R.id.model_select_listview_imageView1,R.id.model_select_listview_textView1},click);
自定義的SimpleAdapter(此範例裡的getView是我按的那個item的圖片要顯示 其他的要隱藏,每個案例不同 需自己改寫)
public class ListViewItemAdapter extends SimpleAdapter { private Context context = null; private ArrayList<HashMap> data = null; private int itemLayout ; private String[] componentTagAry = null; private int[] componentXMLIDAry = null; private boolean[] click = null; /** * * @param context * @param data * @param resource * @param from [Image,TextView] * @param to [Image,TextView] * @param click 是否click */ public ListViewItemAdapter(Context context, ArrayList<HashMap> data, int resource, String[] from, int[] to,boolean[] click) { super(context, data, resource, from, to); this.context = context; this.data = data; this.itemLayout = resource; this.componentTagAry = from; this.componentXMLIDAry = to; this.click = click; } public View getView(final int position, View convertView, ViewGroup parent) { LayoutInflater factory = LayoutInflater.from(context); HashMap item = (HashMap) data.get(position); View itemView = factory.inflate(itemLayout, parent, false); final ImageView imageView = (ImageView) itemView.findViewById(componentXMLIDAry[0]); TextView textView = (TextView) itemView.findViewById(componentXMLIDAry[1]); textView.setText(item.get(componentTagAry[1]).toString()); textView.setTag(item); //以上都是固定寫法,下面是我特殊案例的改寫,可依照自己的需求去寫 itemView.setOnClickListener(new OnClickListener(){ public void onClick(View v) { if(click[position]){//如果有click imageView.setVisibility(0);//設為可見的 }else{ imageView.setVisibility(4);//設為不可見的 } } }); return itemView; } }
留言列表