Android - Button in ListView

在Android內ListView是個相當常用的東西
相對於iOS來說也就是TableView
在iphone上面用tableView或Android的ListView上面加個按鈕都是相當容易的事
但是加了按鈕後該如何取得按鈕的事件(按下、放開、點兩下、長按、拖曳....等)在Android上面卻成了問題
當按鈕與ListView同時出現時只能夠偵測到按鈕的事件
而原本所使用的interfave或OnItemClickListener來偵測按鈕事件卻會失效

如下圖就是兩個同時存在的狀況(ListView & checkBox)


如果沒有解決辦法我也不會來po這篇XD
在Listview的interface內getView加上下面這行(以圖中這範例為例,使用checkBox)
checkBox.setFocusable(false);


但是光這樣設定還是會造成checkBox跟背景沒辦法融合
也就是點按鈕是按鈕,ListView的row是不同的地方
只要加上以下這行,把checkBox設定為不可按就搞定了
checkBox.setClickable(false);


在Android內的ListView、GridView與ListView內容都必須靠Adapter來作管理(iOS為NSArray或NSMutableArray)
只需要宣告上作修改就可以用另一種方式作呈現

參考資料
Android Developer
Android - ArrayAdapter
Android - ListView
Android - GridView

10 則留言:

  1. 不好意思~ 我想請問你一下
    文章內寫的這個"Listview的interface內getView加上下面這行"請問這意思是?
    因為我在我的介面裡找不到getview耶...
    設定也會錯誤 想請問要怎麼做呢?
    希望您幫幫我~ 謝謝 ^ ^

    回覆刪除
  2. 請參考下面連結
    http://developer.android.com/reference/android/widget/ArrayAdapter.html#getView(int, android.view.View, android.view.ViewGroup)

    回覆刪除
  3. 感謝分享
    最近一直拿這問題沒辦法

    回覆刪除
  4. 請問關於listview中的getView
    可以分享一下您相關的心得嗎
    因為在實作上碰上了需要用getView
    來取得項數和設定Textview裡的文字
    懇請網主幫忙

    回覆刪除
  5. to lemon,
    抱歉不太懂你所需的地方,如果是針對listView內的cell可以用xml來做變更,這樣就更加容易來對於內容做個人化,getView是裡面內建的function,主要用來顯示每一個cell的內容,可能最大問題會在lazyload這部份。

    如果有問題也歡迎提出來討論,能幫上忙的地方我也會盡力協助。

    回覆刪除
  6. 感謝版主協助~orz

    目前有看到一些資料是可以由使用者
    自己自訂listview裡面的物件,
    來達到更複雜的自訂內容。
    具體內容是使用SimpleAdapter或著是ArrayAdapter
    去使用裡面的getview函數來達到此目的。

    之前所想問取的是版主有沒有這方面的使用經驗,可以分享使用心得

    ps.版主這篇的code也是加在自訂的getView函數中嗎?

    下面附註查到的一個範例
    http://blog.joomla.org.tw/component/content/article/180.html

    回覆刪除
  7. to lemon,
    剛剛寫了一篇可以參考看看
    http://iskens.blogspot.com/2011/03/android-adapter-getview.html

    回覆刪除
  8. 您好, 請教個問題. 要怎樣實現如Android Setting中的ListView, 有的有CheckBox, 有的是圓型button(button中有三角形, 這是Android自帶的icon嗎)? Thanks.

    回覆刪除
  9. to clliao,
    你所說得那些都是Android SDK的UI沒錯,listView可以自訂內容,你說的圓形按鈕也可以自己設計在用ImageButton來達到效果

    回覆刪除