Android: list.getCheckedItemPositions () всегда возвращает ноль
Я создал собственный ListView, расширив SimpleCursorAdapter. Результат - ИЗОБРАЖЕНИЕ + CheckedTextView (Текст + Флажок).
После того, как у меня были проблемы с неправильными флажками, проверяющимися (посмотреть здесь) Пришлось убратьlv.setChoiceMode (ListView.CHOICE_MODE_MULTIPLE); от создания.
Теперь я нажимаю на строку ListItem, и она проверяет флажок справа.
Я пытаюсь сделать LinearLayout.VISIBLE, когда установлен один или несколько флажков, и сделать LinearLayout.GONE, если флажок не установлен.
Вот код:
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
CheckedTextView markedItem = (CheckedTextView) view.findViewById(R.id.btitle);
if (!markedItem.isChecked()) {
markedItem.setChecked(true);
//show bottom control panel
findViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.VISIBLE);
} else {
markedItem.setChecked(false);
SparseBooleanArray lala = ((ListView) parent).getCheckedItemPositions();
//if no checkbox is checked, hide bottom control panel
if (lala == null) {
findViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.INVISIBLE);
}
}
view.refreshDrawableState();
//showSortBtn(markedItem);
}});
Вот как я связываю listView с пользовательским адаптером:
projection = new String[] { Browser.BookmarkColumns._ID,
Browser.BookmarkColumns.FAVICON, Browser.BookmarkColumns.TITLE,
Browser.BookmarkColumns.URL };
displayFields = new String[] { Browser.BookmarkColumns.TITLE,
Browser.BookmarkColumns.FAVICON, Browser.BookmarkColumns.URL };
int[] displayViews = new int[] { android.R.id.icon, android.R.id.text1 };
cur = managedQuery(BOOKMARKS_URI, projection,
Browser.BookmarkColumns.BOOKMARK + " == 1", null, Browser.BookmarkColumns.VISITS + " DESC");
setListAdapter(new ImageCursorAdapter(this,
android.R.layout.simple_list_item_single_choice, cur,
displayFields, displayViews));
У меня есть две проблемы с этим:
если я установлю 2 или более флажков, а затем сниму только один, LinearLayout исчезнет, что означаетSparseBooleanArray lala = ((ListView) parent).getCheckedItemPositions();
нулевой. почему он нулевой, если еще установлены другие флажки?
если я переключусьfindViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.INVISIBLE);
вfindViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.GONE);
(как я хочу сделать) первый флажок проверяется правильно, и после того, как LinearLayout ушел, все снова беспорядок, как намой предыдущий вопрос.
Цени любую помощь!