0

私の問題は、アイテムを選択してリリースしたときにアイテムが選択されておらず、最初にクリックしたときにチェックされた要素がないことです。

コード:

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

なぜ初めてチェックされないのですか?リリース時にアイテムが選択されないのはなぜですか?ありがとう。

4

1 に答える 1

0

このチュートリアル (スペイン語) を見つけました: http://androcode.es/2012/03/seleccion-individualmultiple-de-elementos-en-un-listview/ これですべてが機能しています。

于 2013-01-14T11:22:15.827 に答える