0
db (SimpleCursorAdapter
)로 채워지는 내 응용 프로그램의 listview에서 다중 선택을 사용하고 있습니다. 목록보기 선택에 이상한 동작이 있습니다.ListView 비 선택된 항목 선택
데이터베이스에 7 개 이상의 항목이있는 경우 목록보기에서 첫 번째 항목을 선택하면 여덟 번째 항목을 선택하지 않을 때도 여덟 번째 항목이 선택되고 그 반대의 경우도 마찬가지입니다. 9 번째 항목을 선택하면 두 번째 행이 선택됩니다.
여기가 어떻게됩니까?
코드 :
String[] projection = { ..table_columns..};
String[] from = { table_columns..};
Cursor cursor = contentResolver.query(SomeContentProvider.CONTENT_URI, projection, null, null,
null);
// the XML defined views which the data will be bound to
int[] to = new int[] {
R.id.color,
R.id.name,
R.id.desc,
};
// create the adapter using the cursor pointing to the desired data
//as well as the layout information
dataAdapter = new SimpleCursorAdapter(
this, R.layout.layout_main,
cursor,
from,
to,
0);
dataAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor, int column) {
int nNameIndex = cursor.getColumnIndexOrThrow(EventsTable.COLUMN_NAME);
if(column == nNameIndex){
TextView nname = (TextView) view;
String name = cursor.getString(cursor.getColumnIndex(EventsTable.COLUMN_NAME));
String formatted_name = "NAME: " +name;
nname.setText(formatted_name);
return true;
}
return false;
}
});
listView.setAdapter(dataAdapter);
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
listView.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> av, View v, int pos, long id) {
if (!listView.isItemChecked(pos)){
listView.setItemChecked(pos, true);
v.setBackground(getResources().getDrawable(R.drawable.listview_bg_selected));
v.setSelected(true);
} else {
listView.setItemChecked(pos, false);
v.setBackground(getResources().getDrawable(R.drawable.listview_bg));
v.setSelected(false);
}
if (listView.getCheckedItemCount() > 0) {
if (mMode == null) {
mMode = startActionMode(new ActionModeCallback());
} else {
mMode.setTitle(listView.getCheckedItemCount() + " " + "Selected");
}
} else {
if (mMode != null) {
mMode.finish();
}
}
return true;
}
});
항목을 선택하면 bindView를 어떻게 체크인합니까? 제 코드를 확인하십시오, 그것을 업데이트했습니다. 커스텀'SimpleCursorAdapter' – input
코드 예제를 사용하고 있지 않습니다. 코드는 백그라운드에서 배경을 설정하는 것과 유사합니다. 상태를 확인하고 데이터를 기반으로 상태를 설정 또는 설정 해제하십시오. 재활용보기가 선택 사항을 반영하도록보기를 설정했기 때문에 설정을 해제하는 것이 매우 중요합니다. –
덕분에 매력처럼 작동했습니다. 그러나 이상하게도, 나는 스타일을 잃어 버렸다. – input