java - ListView 中的复选框 onclick() 错误

标签 java android checkbox onclick

当我通过 ListView 单击复选框(或选择项目)时,遇到了一个奇怪的错误。

由于我的自定义基本适配器,我想在每次选中或不选中复选框时执行 setItemChecked()。

第一次单击什么也不做(看起来没有被单击),但我检查了 onclick() 是否被触发,结果确实如此。所以它看起来没有被点击。

第二次点击显然有效,第三次也同样有效。

但随后它会重新启动,并且下一次单击不会更改复选框的外观。

此外,如果我单击“单击阶段”之一中的其他复选框,则复选框的行为将不会像应有的那样。

这是我的 BaseAdapter 类的重要摘录,其功能如下:

final int finalPosition = position;

checkbox.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View arg0) {
        if (((CheckBox) arg0).isChecked()) {
            ((ListView)parent).setItemChecked(finalPosition, true);
        } else {
            ((ListView)parent).setItemChecked(finalPosition, false);
        }
    }
});

convertView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        checkbox.toggle();
        if (checkbox.isChecked()) {
            ((ListView)parent).setItemChecked(finalPosition, true);
        } else {
            ((ListView)parent).setItemChecked(finalPosition, false);
        }
    }
});

这是整个类(class):

public class ShoppingListBaseAdapter extends BaseAdapter {
private ArrayList<ShoppingListEntry> m_itemList;
private Context m_context;
private LayoutInflater m_inflater;

public ShoppingListBaseAdapter(Context context, ArrayList<ShoppingListEntry> shoppingListEntryArrayList) {
    m_itemList = shoppingListEntryArrayList;
    m_context = context;
    m_inflater = (LayoutInflater.from(context));
}

@Override
public int getCount() {
    return m_itemList.size();
}

@Override
public Object getItem(int position) {
    return null;
}

@Override
public long getItemId(int position) {
    return 0;
}

@Override
public View getView(int position, View convertView, final ViewGroup parent) {
    convertView = m_inflater.inflate(R.layout.list_row, null);

    TextView title = (TextView) convertView.findViewById(R.id.txt_title);
    TextView info = (TextView) convertView.findViewById(R.id.txt_info);
    final CheckBox checkbox = (CheckBox) convertView.findViewById(R.id.checkbox1);

    String itemTitle;
    String productBrand = m_itemList.get(position).getProductBrand().toString();
    if ( !productBrand.isEmpty() ) {
        itemTitle = productBrand + " " + m_itemList.get(position).getProductName().toString();
    } else {
        itemTitle = m_itemList.get(position).getProductName().toString();
    }
    title.setText(itemTitle);

    String itemInfo;
    String productAmount = m_itemList.get(position).getProductAmount();
    float productPrice = m_itemList.get(position).getProductPrice();
    itemInfo = productAmount + ", " + productPrice + "€";
    info.setText(itemInfo);

    final int finalPosition = position;

    checkbox.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            if (((CheckBox) arg0).isChecked()) {
                ((ListView)parent).setItemChecked(finalPosition, true);
            } else {
                ((ListView)parent).setItemChecked(finalPosition, false);
            }
        }
    });

    convertView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            checkbox.toggle();
            if (checkbox.isChecked()) {
                ((ListView)parent).setItemChecked(finalPosition, true);
            } else {
                ((ListView)parent).setItemChecked(finalPosition, false);
            }

        }
    });


    return convertView;
}

我做错了什么?

最佳答案

使用setOnCheckChange代替,如下所示:

checkbox.setOnCheckedChangeListener.setOnCheckedChangeListener(null);

//if true, your checkbox will be selected, else unselected
            checkbox.setOnCheckedChangeListener.setChecked(item.isSelected());

checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            });

这样,当您想设置其状态(是否选中)时,您的监听器将不会调用,之后将通过更改其状态来调用, 测试一下然后让我知道结果

关于java - ListView 中的复选框 onclick() 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44638375/

相关文章:

java - 为 DAO 编写测试

Java编程帮助和android开发

android - 外部链接到 Firebase 存储上存储的文件?

javascript - 我需要 javascript checkboxes.click(function()) 在页面首次加载时启动

c# - 在 DataList 中使用 checkBox 和 textBox

javascript - 如何根据复选框数组修改字符串?

java - 根据单词在java中拆分字符串

java - 在java中区分16位和8位灰度图像

php - 使用 Phonegap 从 Android 上传照片

android - RecyclerView 中的 OnLongItemClick