0
當我單擊複選框(或選擇項目)通過ListView時,我有一個奇怪的錯誤。checkbox在列表視圖中的onclick()錯誤
由於我的自定義基礎適配器我想執行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);
}
}
});
這是全班同學:
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;
}
我在做什麼錯?
感謝您的快速答案! 我也試過這種可能性,但不幸的是,有相同的行爲。 除此之外,我不具備的功能'checkbox.setOnCheckedChangeListener.setOnCheckedChangeListener(NULL);'和'checkbox.setOnCheckedChangeListener.setChecked(item.isSelected());' 我只有'checkbox.setOnCheckedChangeListener()' –
哦,我會測試你的代碼找到問題 – Meikiem
我不知道,但現在它工作完美.. 我剛剛改變了'getItem(int位置){返回m_itemList.get(位置);}'和'getItemID( int position){return position;}'函數 –