上一篇講了ListView的基本使用方式,是通過SimpleAdapter適配器來設定,但是這種方法無法實現在每一行添加按鈕,添加圖片,動態添加或者刪除某一行,或者使捲軸自動滑動到最底端的要求,因此需要自訂一個適配器類繼承BaseAdapter進而實現更加豐富的方法。
另外由於這已經不是我第一次做這個總結了,為了增加一點挑戰,這次就做一個 QQ好友名單的ListView
首先還是xml布局檔案,在其中添加ListView控制項:
主布局layout_main.xml
然後是每一行ListItem的布局,採用LinerLayout布局,一些注意的點都在裡面:
因為這裡使用的是自己定義的MyAdapter類,可以更靈活的實現列表的一些功能,比如和資料庫相聯絡,動態更新資料、添加按鈕控制項等等,在本例中模仿QQ列表為頭像設定成了ImageButton,後面的附圖中的一個Toast資訊就是點擊映像做出的相應,當然點擊一行也可以做出相應,這個後續可能會對QQ程式做一些擴充,如增加網路模組,聊天視窗等等。到時候再進一步討論。
下面是MyAdapter類,這個類最好和MainActivity類放在同一個包裡。
java.util.* android.widget.* MyAdapter Context context= ArrayList<HashMap<String,Object>> list= MyAdapter(Context context, <HashMap<String, Object>> list, String[] from, .context =.resources =.list =.from =.to = getCount() { Object getItem( arg0) { getItemId( itemId) { ImageButton ctPhoto= TextView ctName=,ctSign= =(ImageButton)convertView.findViewById(to[0=(TextView)convertView.findViewById(to[1=(TextView)convertView.findViewById(to[2 ImageListener ImageListener(.position= String str=list.get(position).get(from[1+" is Clicked" View getView( = (convertView====inflater.inflate(resources,); viewHolder==(ViewHolder)convertView.getTag(); 012 convertView;
最後就是MainActivity類了,與因為MyAdapter的封裝方式與SimpleAdpter是一樣額,因此這裡MainActivity的操作基本不變。
java.util.* MainActivity String[] from={"userPhoto","userName","userSign"}; [] to= [] photoRes=={"暗夜之殤","街角的幸福","靜悄悄","憤怒的小胖"={"Where is my love...","有些事終於想開了","總有一天會尋找到自己的幸福","誰再叫我小胖我跟誰急..." ArrayList<HashMap<String,Object>> list=<String,Object> map== == ArrayList<HashMap<String,Object>>( i=0; i<4; i++= HashMap<String,Object>(); map.put("userPhoto""userName""userSign" MyAdapter adapter= MyAdapter(
最後附上結果圖[感覺比幾個月前初學時有點更美觀了一些]
這幾個頭像是我自己下載的圖片,其對應的資源地址在 MainActivity中用一個 photoRes數組表示的~
關於事件響應的一些問題等進一步擴充項目時再續。