AndroidDev 板


LINE

最近,我朋友問我怎麼用自訂的ListView動態增減列, 剛好可以分享一下, 如果對如何自訂ListView不了解, 可以參考一下#1DbiQ5jJ, 將代碼貼到板上任何一個地方,就可以找到我上一篇文章:) 那麼如何利用自訂的ListView來動態增加或刪除呢? 我們首先利用Menu讓使用者能夠動態的增加或刪除, 因此先在Menu裡面加入兩個選項,分別是add item及remove item, @Override public boolean onCreateOptionsMenu(Menu menu) { // TODO Auto-generated method stub menu.add(0, Menu.FIRST, 0, "add item"); menu.add(0, Menu.FIRST+1, 0, "remove item"); return super.onCreateOptionsMenu(menu); } 就會看到這樣的一個畫面, http://uploadingit.com/file/jrlg3a2bwwykwkyo/menu1.png
接著我們想要按下add item的時候,讓ListView多出一列, 在加入public boolean onOptionsItemSelected(MenuItem item) , 當你按下menu選項的處理事件, @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub switch(item.getItemId()){ case Menu.FIRST: myAdapter.addItem(myAdapter.getCount()+1); break; case Menu.FIRST+1: break; } return super.onOptionsItemSelected(item); } 這時候,切換到MyAdapter.java的頁面,新增兩個方法,分別是: public void addItem(int position) public void removeItem(int position) 當按下add item的時候,就會呼叫addItem(), 而按下remove item的時候,就會呼叫removeItem(), 這時候我們的MyAdapter需要作一下變動, 還記得自訂的ListView裡面的getView()嗎? 它是用來顯示ListView所有的列,但是我們要將每一列存成一個一個的物件, 所以需要改變一下寫法, 首先,宣告一個ArrayList來儲存每一個列的View, private ArrayList<View> arrayList; 並且在建構子初始化它, arrayList = new ArrayList<View>(); 這時候就可以開始使用它了, 再來就是在getCount()的return變成arrayList的大小, @Override public int getCount() { // TODO Auto-generated method stub return arrayList.size(); } 接著將getView所有的內容搬到addItem()裡面, public void addItem(int position){ TagView tag; View view = adapterLayoutInflater.inflate(R.layout.adapter, null); tag = new TagView( (Button)view.findViewById(R.id.AdapterButton), (ImageView)view.findViewById(R.id.AdapterImage), (TextView)view.findViewById(R.id.AdapterText)); view.setTag(tag); arrayList.add(view); tag.image.setBackgroundResource(R.drawable.icon); tag.button.setText("button"+arrayList.size()); tag.text.setText("text"+arrayList.size()); this.notifyDataSetChanged(); } 比較要注意的是arrayList.add(view); 我們每新增一列,就必須把那一列的view加入到arrayList裡面, 最後的this.notifyDataSetChanged()是通知baseAdapter我們已經將資料更新了, 它就會執行getCount()取得列數並且重跑一次getView(), 在getView()這邊我們只需要改變return值即可, @Override public View getView(int position, View view, ViewGroup parent) { // TODO Auto-generated method stub return arrayList.get(position); } 現在你可以跑看看程式,一開始什麼都沒有,當按下Menu->add item, 就會跑出一列我們自訂的ListView了, 接著我們來寫remove item部份, 回到onOptionsItemSelected()這個函式, 在case Menu.FIRST+1:後面加入呼叫removeitem, case Menu.FIRST+1: myAdapter.removeItem(myAdapter.getCount()-1); break; 再到MyAdapter.java裡面修改removeItem() public void removeItem(int position){ if(!arrayList.isEmpty()){ arrayList.remove(position); this.notifyDataSetChanged(); } } 到這裡為止,我們就可以操作新增/刪除的功能了, 如果成功就會出現下面的畫面, http://uploadingit.com/file/hkqtqu1qure25r4o/menu2.png
http://uploadingit.com/file/cfbkdtpclgebrf3e/menu3.png
如果沒有出現預期的結果,沒關係, http://uploadingit.com/file/d5cr1yp8l0i1ykay/MyListView.zip 下載這個檔案就可以看到所有的程式碼, 其實我覺得這樣的寫法有點粗糙, 我比較偏向SimpleAdapter那樣寫, 可能需要在研究一下怎麼寫比較好 如果有錯誤或有更好的寫法 請務必告訴小弟,避免誤導大家,謝謝。 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.64.102.249







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP