Облицовка очень странной проблемы. У меня есть listview
с checkbox
на каждый предмет, когда я нажимаю на первый элемент listview
, он выбирается, но вместе с этим пунктом также выбирается последний элемент списка! когда я просматриваю список. Без прокрутки он отлично работает.Неверный элемент, выбранный в Listview onItemClick
Также, когда я выбираю последний элемент, первый элемент выбирается вместе с ним после прокрутки. Напоминаем, что все остальные элементы между этими первыми и последними работают правильно. И забавная часть, после выбора первого или последнего элемента, , если я не прокручиваю listview
в течение 2-3 секунд, он отлично работает, а затем. Так что я ожидаю, что это может быть проблемой рендеринга представления или несколько. Может кто-нибудь указать мне, что, черт возьми, здесь происходит ..
Cursor cursor = queryDatabase();
// The desired columns to be bound
String[] columns = new String[] {
DataBaseHelper.ROW_PROFILE_NAME,
DataBaseHelper.ROW_PROFILE_TYPE,
DataBaseHelper.ROW_ID
};
// the XML defined views which the data will be bound to
int[] to = new int[] {
R.id.profileName,
R.id.profileStatus
};
// create the adapter using the cursor pointing to the desired data
//as well as the layout information
mAdapter = new SimpleCursorAdapter(
this, R.layout.profile_listview_delete_item,
cursor,
columns,
to,
0);
listView = (ListView) findViewById(R.id.profile_listview_delete_main);
// Assign adapter to ListView
listView.setAdapter(mAdapter);
listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
// TODO Auto-generated method stub
CheckBox cb;
Cursor c = mAdapter.getCursor();
String prodile_id = c.getString(c.getColumnIndex(DataBaseHelper.ROW_ID));
cb = (CheckBox)arg1.findViewById(R.id.checkbox);
cb.toggle();
if(cb.isChecked())
{
profileStack.add(prodile_id);
//Toast.makeText(getApplicationContext(), String.valueOf(profileStack), Toast.LENGTH_LONG).show();
counter++;
}
else if(!cb.isChecked())
{
profileStack.remove(prodile_id);
//Toast.makeText(getApplicationContext(), String.valueOf(profileStack), Toast.LENGTH_LONG).show();
counter--;
}
countSelectedItem.setText(String.valueOf(counter)+" items selected");
mAdapter.notifyDataSetChanged();
}
});
Можете ли вы опубликовать ваш класс адаптера Я думаю, что это проблема шаблона View Holder? – Rajesh
@ Rajesh, я использую SimpleCursorAdapter, как вы можете видеть код выше. – ridoy
Ваш код неправильный. Вы должны использовать пользовательский адаптер с классом viewholder. Из этого адаптера, изменяя значение вашего флажка, вы должны изменить значение поля из вашего адаптера в отношении этого флажка. После нажатия кнопки listview получите позицию и получите значения из вашего адаптера. – Gunaseelan