0
チェックボックス(またはアイテムの選択)をクリックしてListViewをクリックすると、私は奇妙なバグがあります。チェックボックスリストビューのonclick()バグ
私のカスタムベースアダプタのため、チェックボックスがオンになっているかどうかにかかわらず、setItemChecked()を実行します。
最初のクリックは何もしません(クリックされていないように見えます)。しかし、onclick()が起動されたかどうかを確認しました。だからそれはちょうどクリックされていない見えた。
2回目のクリックは明らかに機能し、3番目のクリックも同様に機能します。
しかし、それが再開し、次のクリックでチェックボックスの外観が変わることはありません。
:私は、彼らがすべきのようにここで は機能を持つ私の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.setChecked(item.isSelected()); ' 私は' checkbox.setOnCheckedChangeListener(持っている) ' –
ああ、私は、関数' checkbox.setOnCheckedChangeListener.setOnCheckedChangeListener(null)を持っていけないことに加えて 私は問題を見つけるためにコードをテストします – Meikiem
私は考えていませんが、今は完全に働いています.. 私は 'getItem(int position){return m_itemList.get(position);}'と 'getItemID( int position){return position;} 'functions –