簡體   English   中英

帶有復選框問題的Android列表視圖

[英]Android listview with checkbox problem

我有一個奇怪的問題! 我正在嘗試使用復選框創建列表視圖。 在我的另一個線程中,我被告知我應該使用一個數組來跟蹤被檢查的行。 我做到了,它工作得很好,但邏輯錯了,我現在遇到另一個問題。

public View getView(final int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.row, null);
        }

        CheckBox checkbox = (CheckBox)v.findViewById(R.id.checkbox);
        checkbox.setChecked(checked[position]);

        final LinearLayout rowLayout = (LinearLayout) v.findViewById(R.id.individualRow);

        checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener(){

            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked)
                {
                    rowLayout.setBackgroundColor(Color.GRAY);                       
                    checked[position] = false;                      
                }
                else
                {   
                    rowLayout.setBackgroundColor(Color.DKGRAY);
                    checked[position] = true;                       
                }
            }               
        });
   }

取消選中所有復選框后,它可以正常工作,即使我向下滾動並再次備份,但仍保留了我選中的復選框,但檢查的數組未正確設置。 基本上if測試應該是另一種方式!

if(isChecked)
{
   rowLayout.setBackgroundColor(Color.GRAY);                        
   checked[position] = true;                        
}
else
{   
   rowLayout.setBackgroundColor(Color.DKGRAY);
   checked[position] = false;                       
}

問題在於滾動真的是因為每次我滾動onCheckedChanged方法都被調用,並且因為它回收了它在新行的位置傳遞的行,它沒有被選中但是因為它與先前選擇的那個具有相同的索引它改變了它的價值。 例如,如果我選中帶索引2的框(將其設置為true),然后向下滾動一個新行變為索引為2的行,則再次調用該方法並取消設置復選框(已檢查數組中的字段)。

我需要它來“記住”所有被檢查的盒子。 換句話說,我希望正確初始化checked數組。 並且還要記住每次滾動時檢查哪些盒子並且不丟失它們!

我究竟做錯了什么?

你能幫我么?

提前謝謝 - 邁克

這很棘手。

問題是你正在調用setChecked ,激活舊的OnCheckedChangeListener

修復非常簡單:在調用setChecked之前調用setOnCheckedChangeListener 這樣,您可以從循環視圖中切斷與舊偵聽器的鏈接。

選中此選項可在Listview單擊選中Checkbox

AdpList adapter=new AdpList(this,array,false);
listview.setAdapter(adapter);

當您選擇任何項目時,然后在項目CLickListener執行Follows

listview.setonItemClickListener(new OnItemClickListener)

在這里,您將獲得當前項目的位置

array.get(Position);

獲取Checkbox視圖,單擊Checkbox,在Adapter中創建一個方法,Like

adapter.setList(true);
adapter.notifyDataSetChanged();

並在適配器中檢查我在Setlist方法中傳遞的參數然后放入條件:

if (isChecking==true)
{
checkbox1.setChecked(true);
}else{
checkBox1.setChecked(false);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM