2011-08-17 85 views
4

好的,所以我正在製作一個簡單的待辦事項列表應用程序,它從設置的字符串數組中讀取項目,並將其作爲simple_list_item_checked顯示在列表視圖中。一切都很好,我已經設置了onClickListener,以便檢查我正在點擊什麼,但是,當我點擊一個項目時,它也會檢查項目8個項目,重複。 (即我輕按頂部的項目,並得到了檢查,並在項目8項下被選中,那麼8下來之後被選中,等等,等等),這裏是主要的活動代碼:簡單列表項檢查點擊檢查多個項目

package com.disneyland; 

import android.app.ListActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.CheckedTextView; 
import android.widget.ListView; 
import android.widget.AdapterView.OnItemClickListener; 

public class Launch extends ListActivity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     String[] Rides = getResources().getStringArray(R.array.rides); 
     setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, Rides)); 

     ListView lv = getListView(); 
     lv.setTextFilterEnabled(true); 

     lv.setOnItemClickListener(new OnItemClickListener(){ 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, 
        long id) { 
       CheckedTextView check = (CheckedTextView)view; 
       check.setChecked(!check.isChecked()); 

      } 
     }); 



    } 
} 

很明顯,我的問題是爲什麼會發生這種情況,我該如何解決?

回答

0

我不能肯定地說,但我有一個猜測。你在適配器的getView方法中用convertView做什麼?看起來你沒有正確地遵循convertView模式,如果是這種情況。在特定時間,屏幕上是否有大約7或8個列表項?您可能無法正確返回正確的視圖。

這從Android書摘將提供列表視圖的一個很好的解釋,如果你是新來使用它們:http://commonsware.com/Android/excerpt.pdf

0

我意識到這是一個很舊的文章,所以你可能已經解決了這個問題,但對於受益像我這樣的人尋找答案,我會分享我發現的。

我有類似的問題,並已就這個問題做了一些研究。本文:http://logc.at/2011/10/10/handling-listviews-with-multiple-row-types/給出了一些答案,並解釋了爲什麼會發生這種情況。看來,android listView只能「記住」視圖類型,以便在任何時候在屏幕上看到它,以便保留內存。因此,雖然您的適配器會在您滾動時正確顯示不同的數據,但刻度標記將被視爲其他7個視圖中的不同視圖。

一個解決方案(如果您希望總是勾選相同的行)是使用上面的文章中的示例告訴listView使用2個或更多不同的行類型。

如果您希望動態應用滴答,那麼您需要更新提供listView的適配器,然後調用adapter.notifyDataSetChanged來更新您的列表。

1

我也遇到了這個問題,並管理一個快速修復。 我跟着icecreamman的鏈接,發現我的ListView XML失蹤行:

android:choiceMode="multipleChoice" 

這樣就可以選擇多個項目。如果我選擇了singleChoice,則在任何時刻只能查看列表中的一個項目,如單選按鈕。這條線解決了我的問題。