SherlockListFragment中的上下文操作模式:未选择项目,我无法选择多个项目

时间:2013-01-13 13:34:27

标签: android listview android-actionbar onlongclicklistener

我的问题是,当我选择一个项目并且我发布的项目未被选中时,我第一次单击那里没有选中的元素。

代码:

public class SongsFragment extends SherlockListFragment implements
    LoaderManager.LoaderCallbacks<Cursor>, OnItemLongClickListener {

...

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    ...

    mMode = null;
    mListView = getListView();
    mListView.setItemsCanFocus(false);
    mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    mListView.setOnItemLongClickListener(this);

}

...

@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
    Log.d(getClass().getSimpleName(), "longClick");

    SparseBooleanArray checked = mListView.getCheckedItemPositions();

    if(checked.size() == 0)
        Log.d(getClass().getSimpleName(), "checked size 0");

    boolean hasCheckedElement = false;
    for (int i = 0; i < checked.size() && !hasCheckedElement; i++) {
        Log.d(getClass().getSimpleName(), "For: " + Integer.toString(i));
        hasCheckedElement = checked.valueAt(i);
    }

    if (hasCheckedElement) {
        Log.d(getClass().getSimpleName(),"hasCheckedElement");
        if (mMode == null) {
            mMode = getSherlockActivity().startActionMode(
                    mActionModeCallback);
        }
    } else {
        Log.d(getClass().getSimpleName(),"!!!hasCheckedElement");
        if (mMode != null) {
            mMode.finish();
        }
    }

    return false;
}
...
}

例如:点击某个项目,发布,点击同一项目。这是输出:

SongsFragment(16560): longClick
SongsFragment(16560): checked size 0
SongsFragment(16560): !!!hasCheckedElement
SongsFragment(16560): longClick
SongsFragment(16560): For: 0
SongsFragment(16560): hasCheckedElement

为什么第一次没有检查? 为什么我发布时没有选择该项目? 感谢。

1 个答案:

答案 0 :(得分:0)

我找到了这个教程(西班牙文):http://androcode.es/2012/03/seleccion-individualmultiple-de-elementos-en-un-listview/ 现在一切正常。