Я создал собственный ListView, расширив SimpleCursorAdapter. Результатом является IMAGE + CheckedTextView (Text + Checkbox).Android: list.getCheckedItemPositions() всегда возвращает null
После того, как у меня возникли ошибки с проверкой флажков (see here) Мне пришлось удалить lv.setChoiceMode (ListView.CHOICE_MODE_MULTIPLE); от onCreate.
Теперь я нажимаю на строку ListItem и проверяет правильность флажка.
Что я пытаюсь сделать, это сделать LinearLayout.VISIBLE, когда отмечены 1 или более флажков и сделайте 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();
имеет значение NULL. почему он равен нулю, если есть еще другие флажки?если я переключаюсь
findViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.INVISIBLE);
кfindViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.GONE);
(как я хочу сделать) первый флажок, проверяется правильность и после того, как LinearLayout нет, все беспорядок снова, так же, как на my previous question.
Цените любую помощь!
Как я уже говорил, мой choice_mode не set (что означает, что он установлен в none), потому что когда я использую lv.setChoiceMode (ListView.CHOICE_MODE_MULTIPLE); Я получаю то, что происходит по моему предыдущему вопросу: http://stackoverflow.com/questions/4010623/android-click-on-listitem-checks-wrong-checkbox - при установке флажка на определенной строке он устанавливает флажок на другая линия ... Любое решение для этого? Думаю, это решит все мои проблемы: \ –
Я обновил свой ответ, попробую что-то подобное. В вашем первом, хотя. Вы должны установить режим multi_choice – Falmarri
нет ... такие же проблемы. если я не устанавливаю режим выбора, я замечаю (или принудительно закрываю для Null), и если я устанавливаю lv.setChoiceMode (ListView.CHOICE_MODE_MULTIPLE); Я получаю сумасшедший checkboxing ...: \ –