簡體   English   中英

我的自定義listView與復選框和imageViews奇怪的行為

[英]My custom listView with Checkboxes and imageViews Strange Behaviour

我有一個包含使用ImageLoader (框架)加載的圖像的ListView和每個圖像的復選框。我有一個適配器,它為此ListView擴展了BaseAdapter ,當我檢查其中一個復選框並滾動它時,我看到了其他復選框會自動檢查。 有什么辦法可以解決我的問題。 請有人給我一個線索或例子。

這是因為這些行正在被重用,因此您需要為每行設置一些屬性,以告知該行是否已選中。 然后在您的getView()執行“ if and else”語句,以查看該行是否被選中,以及是否僅對其進行檢查,否則保持未選中狀態。

我建議您使用一個布爾數組,在該數組中您對列表中的每個位置都保持選中狀態。 ListView在滾動時重新創建列表元素,因此您的檢查可能被弄亂了。 這意味着您必須檢查要實例化的元素位置的布爾值是否為true,然后使用checkBox.setChecked(true)或checkBox.setChecked(false)。

簡單,

Set<String> bs = new HashSet(String);

String[] bid;

並將其寫在您的getView方法中,將其作為模板。 不作為解決方案

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

            check = (CheckBox) row.findViewById(R.id.your_checkboxid);
            check.setOnCheckedChangeListener(new OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if(isChecked)
                    {
                        bs.add(bid[position]);
                    }
                    else
                    {
                        if(bs.contains(bid[position]))
                        {
                            bs.remove(bid[position]);
                        }
                    }

                }
            });

            if(bs.contains(bid[position]))
            {
                check.setChecked(true);
            }
            else
            {
                check.setChecked(false);
            }   
            return row;
        }

暫無
暫無

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

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