gpt4 book ai didi

android - CursorAdapter 中断 CHOICE_MODE_MULTIPLE 选项

转载 作者:行者123 更新时间:2023-11-29 00:37:04 24 4
gpt4 key购买 nike

我有一个 ListFragment,我在其中向我的 ListView 添加了一个 CursorAdapter,我希望能够单击多行,以便使用上下文操作栏。我使用 SherlockActionbar,当我使用简单的 ArrayAdapter 时,它工作正常。但是当我切换到 CursorAdapter 时,它会中断。我不能选择多行,只能选择一个。知道为什么会发生这种情况吗?

onActivityCreated 中,我设置了列表:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActionMode = null;
mListView = getListView();
FinTracDatabase database = mDatabaseProvider.get();
Cursor cursor = database.getTransactionCursor(false);
mCursorAdapter = new TransactionListAdapter(getSherlockActivity(), cursor);
mListView.setAdapter(mCursorAdapter);
mListView.setItemsCanFocus(false);
mListView.setOnItemClickListener(this);
mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
}

这是我的适配器:

private class TransactionListAdapter extends CursorAdapter {

public TransactionListAdapter(Context context, Cursor cursor) {
super(context, cursor, 0);
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
bindToExistingView(view, cursor);
}

private void bindToExistingView(View view, Cursor cursor) {
CheckedTextView amountView = (CheckedTextView) view;
amountView.setText(cursor.getString(cursor.getColumnIndex(Transactions.TITLE)));
}

@Override
public View newView(Context arg0, Cursor arg1, ViewGroup arg2) {
LayoutInflater layoutInflater = getSherlockActivity().getLayoutInflater();
View view = layoutInflater.inflate(android.R.layout.simple_list_item_multiple_choice, arg2, false);
bindToExistingView(view, arg1);
return view;
}

}

最后是 onClickListener:

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
SparseBooleanArray checked = mListView.getCheckedItemPositions();
boolean hasCheckedElement = true;
for (int i = 0; i < checked.size() && !hasCheckedElement; i++) {
hasCheckedElement = checked.valueAt(i);
}

if (hasCheckedElement) {
if (mActionMode == null) {
mActionMode = getSherlockActivity().startActionMode(new SelectingActionMode());
}
} else {
if (mActionMode != null) {
mActionMode.finish();
}
}
}

如果我将 Adapter 切换为简单的 ArrayAdapter,它可以正常工作。

new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_multiple_choice, new String[]{"A", "B", "C"})

我很绝望,我不知道为什么会这样。

最佳答案

为了 ListView.CHOICE_MODE_MULTIPLE模式正常工作,适配器中的每个项目都必须从 getItemId() 返回一个唯一值方法。

您为适配器使用的光标是在这些行上生成的:

  FinTracDatabase database = mDatabaseProvider.get();
Cursor cursor = database.getTransactionCursor(false);

您能检查它的每一行的“_id”列是否具有唯一值吗?我怀疑它们都具有相同的值(value)观,从而导致了您所看到的行为。

关于android - CursorAdapter 中断 CHOICE_MODE_MULTIPLE 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11953888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com