2017-07-02 97 views
0

我有一個使用由文本視圖和圖像視圖組成的自定義佈局的元素列表。爲此,我遵循像解釋here的ViewHolder模式。圖像視圖顯示兩個圖標中的一個,我想更改點擊的圖像視圖的圖標。Android自定義ArrayAdapter |在ImageView上更改圖標點擊

所以我的第一種方法是定義在我的適配器類的覆蓋的getView函數的ImageViews的點擊監聽器。問題是當第一個ImageView的圖標發生變化時,我向下滾動到最後一個圖標也發生了變化。 This question here沒有幫助。

Here我發現,它不是以處理getView功能點擊的最佳方法,但它更好地做到這一點在listView.setOnItemClickListener。我試過了,但我無法確定是否單擊了ImageView,因爲父類對象包含列表項和視圖參數包含ImageView的LinearLayout(即使直接點擊ImageView的)。因爲它建議here沒有幫助,所以設置外部LinearLayout的android:focusable="false"

我確定有人一定有這個問題/用例,但我無法找到解決方案。那麼,在我的custon列表項目視圖中處理ImageView點擊的最佳方法是什麼?

+0

當你點擊圖像視圖時,你應該有第二個圖標。如果再次點擊,第一個圖標會出現? – Karim

回答

0

嘗試添加下列屬性的可點擊的ImageView,而不是它的ViewGroup,您的LinearLayout:

android:focusable="false" 
android:focusableInTouchMode="false" 

...只要在AdapterView/ListView/RecyclerView中更新UI,您應該充分利用一個int標誌來跟蹤被單擊的列表項的位置,然後將其設置爲條件語句在invok之前的getView()因爲「所有其他」行將被更新,尤其是在100行的列表中。

我實際上在類似的問題herehere中回答了這個問題。

+1

謝謝,我得到它的工作。事實上,值_focusable_和_focusableInTouchMode_沒有什麼區別。我在我的'Adapter'類中創建了一個私有變量,它用暫停圖標存儲圖像的位置。在'draw'方法中,我區分'draw'方法的位置等於暫停圖標的位置以設置正確圖標的情況。 [Here](https://stackoverflow.com/a/16453443)我發現了一些建議,指派OnClickListener具有良好的性能。 – Patrick

0

如果你有兩個圖標,你可以簡單地把一個自定義的複選框而不是imageview的:

<CheckBox 

      android:id="@+id/customchechecbox" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/checkbox_selector" 
      android:button="@android:color/transparent" /> 


checkbox_selector : 

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:drawable="@drawable/checkbox" 
      android:state_checked="false"/> 
    <item android:drawable="@drawable/checkboxselected" 
      android:state_checked="true"/> 
    <item android:drawable="@drawable/checkbox"/>  
</selector> 
+1

我看到你的方法的重點,但把它看作是一個「棘手的解決方法」,這就是爲什麼我遵循@DaveNOTDavid的建議。 – Patrick

相關問題