SimpleCursorAdapterを拡張してカスタムListViewを作成しました。結果は、IMAGE + CheckedTextView(テキスト+チェックボックス)です。
間違ったチェックボックスがチェックされる問題が発生した後(ここを参照)、 lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);を削除する必要がありました。onCreateから。
次に、ListItem行をクリックすると、右側のチェックボックスがオンになります。
私がやろうとしているのは、1つ以上のチェックボックスがチェックされている場合は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つの問題があります。
2つ以上のチェックボックスをオンにしてから、1つだけをオフにすると、LinearLayoutが消えます。つまり
SparseBooleanArray lala = ((ListView) parent).getCheckedItemPositions();
、nullです。他のチェックボックスがオンになっているのに、なぜnullになるのですか?(やりたいように)に切り替える
findViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.INVISIBLE);
とfindViewById(R.id.bottom_control_bar).setVisibility(LinearLayout.GONE);
、最初のチェックボックスが正しくチェックされ、LinearLayoutがなくなった後、前の質問と同じように、すべてが再び混乱します。
助けに感謝します!