2013-04-29 44 views
2

我的應用程序有一個調查問卷,這是顯示感謝listView。 用戶可以通過單擊ListItem來通過true或false進行回答。 imageView指示答案爲真。 (每次ListItem被點擊時我改變圖像視圖)Android:爲什麼setImageResource在我的listView/onListItemClick中更改了幾個圖像?

全局它工作正常。我已經能夠動態地更改imageView,但是當我使用setImageResource時,圖像在幾行上發生了變化。 如果我點擊第2行(索引1),圖像在第2行也會在第12行和第22行上發生變化。

目前我一直無法找到解決方案。 如果您對我有任何線索,我將不勝感激。

這裏是我的列表項的佈局

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="30dp" 
> 

<ImageView 
    android:id="@+id/ivCheck" 
    android:layout_width="25dp" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical" 
    android:contentDescription="selection state" 
    android:src="@drawable/check_grey" /> 


<TextView 
android:id="@+id/tvId" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:textIsSelectable="false" 
android:layout_gravity="center_vertical" 
android:text="dummy text" 
android:visibility="gone" 
/> 

<TextView 
    android:id="@+id/tvText" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_gravity="center_vertical" 
    android:layout_marginLeft="14dp" 
    android:layout_toRightOf="@+id/ivCheck" 
    android:text="dummy text" 
    android:textIsSelectable="false" /> 

</RelativeLayout> 

這裏是我的方法,改變圖像(在listActivity)

protected void onListItemClick(ListView l, View v, int position, long id) {  
ImageView image = (ImageView)v.findViewById(R.id.ivCheck); 
QuizAnswer currentQuizAnswer = (QuizAnswer) quizRequest.getListAnswers().get(position); 
if(currentQuizAnswer.isSelected()) { 
    image.setImageResource(R.drawable.check_grey); 
} else { 
    image.setImageResource(R.drawable.check_green); 
} 
currentQuizAnswer.setSelected(!currentQuizAnswer.isSelected()); 
} 

謝謝你在先進的幫助

+0

您的列表顯示正確?你有什麼機會重複這些項目?也許他們是一樣的觀點,所以這就是爲什麼它是這樣的。 – 2016-03-25 13:34:56

回答

0

這是由於視圖在ListView中回收。您需要覆蓋getView您的適配器的方法,並重置您的ImageView的來源,這與以前的更改無關。

欲瞭解更多信息,請閱讀this或觀看this視頻。

+0

行爲不容易理解。 感謝您使用這些有用的鏈接。 – ddams 2013-04-29 13:30:07

+0

是的,這是一個很難開始的話題,但一旦你開始研究這個,你會發現它很容易 – waqaslam 2013-04-29 13:38:13

0

變化一行,看到了魔術

position = position % (QuizAnswer) quizRequest.getListAnswers().size(); 
0

您必須自定義適配器適用於列表視圖。 檢查這些鏈接:

Link 1 Link 3 Link 4。希望這會對你有所幫助。也看看The world of listview.你的疑惑肯定會解決,這是一個很好的教程。

相關問題