ActionMode Callback selected Items Problem

P

Panikmeister

Neues Mitglied
0
Halli Hallo,

ich werde langsam wahnsinnig :(

Irgendwie schaffe ich es nicht, die selektierten Items meiner Listview richtig auszulesen. Die Funktionen getSelectedItem(Id/Position) ergeben alle null und -1.
getCheckedItemPosition() ebenso -1. Komischerweise gibt getCheckedItemsCount die richtige Anzahl an, also es sind definitiv Items gechecked. Außerdem gibt getCheckedItemPositions ein korrektes Ergebnis zurück.

Nun finde ich es nicht so toll, ein SparseBooleanArray zu verarbeiten, wenn nur 1 Item selektiert ist.


Code aus der ActivityOberklasse:

Code:
    protected class ActionModeCallback implements  ActionMode.Callback {

        protected ListView listview;
        protected int menuLayout;

        public ActionModeCallback(ListView lv, int layout) {
            this.listview = lv;
            this.menuLayout = layout;
        }

        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            MenuInflater inflater = mode.getMenuInflater();
            inflater.inflate(this.menuLayout, menu);
            return true;
        }

        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            return false;
        }

        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            return handleActionModeItemSelection(mode, item);
        }

        public void onDestroyActionMode(ActionMode mode) {
            //TODO Das clearen will auch nicht so...
            this.listview.clearChoices();
            this.listview.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
            mCab = null;
        }
    }

Code aus einer erbenden Activity:

Code:
    @Override
    public boolean handleActionModeItemSelection(ActionMode mode, MenuItem item) {
        switch (item.getItemId()) {
            case R.id.menu_delete:
                deleteItems(lv.getCheckedItemPositions());
                mode.finish();
                return true;
            case R.id.menu_edit:
                //TODO: Leider liefern alle anderen Methoden immer nur -1 zurück...
                editItem(lv.getCheckedItemPositions());
                mode.finish();
                return true;
            case R.id.menu_quantity:
                editQuantity(lv.getCheckedItemPositions());
                mode.finish();
                return true;
            case R.id.menu_mhd:
                editMhd(lv.getCheckedItemPositions());
                mode.finish();
                return true;
            default:
                return false;
        }
    }

Anbringung der Listener in der erbenden Activity :

Code:
        this.lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                if (mCab != null) {
                    return false;
                }

                mCab = startActionMode(new ActionModeCallback(lv, R.menu.vorratdetail_contextmenu));
                lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
                view.setSelected(true);
                lv.setItemChecked(position, true);
                return true;
            }
        });
        this.lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                if(mCab != null) {
                    if(lv.getCheckedItemCount() > 1) {
                        mCab.getMenu().setGroupVisible(R.id.menu_group_singleSelection, false);
                    } else {
                        mCab.getMenu().setGroupVisible(R.id.menu_group_singleSelection, true);
                    }
                }
            }
        });

Was ist da falsch ??? :( :( :(
 
Zuletzt bearbeitet:
vielleicht ein paar vergessene @Override 's? Versuchs mal kann nciht schaden ;)

Der ursprüngliche Beitrag von 23:00 Uhr wurde um 23:06 Uhr ergänzt:

und ich könnte mich irren aber hast du noch eine variable lv in der Klasse oder versuchst du die variable listview anzusprechen?Aber da müsste der Compiler ja Alarm schlagen
 
Hallo Panikmeister,

leider ist das zu wenig Code. So ist das ein reines Ratespiel, wie man schon an der Antwort von @Jail sieht.
 
Hehe, die @Override Bezeichnung bringt so viel wie eine TODO Bezeichnung: Sie erstellen im allerbesten Fall einen Hinweis der ggf von der Idee erkannt wird und euch irgendwas anzeigt. Auf die kann man gut verzichten.
Allerdings wären vielleicht ein paar "super" super. :)
 

Ähnliche Themen

J
Antworten
5
Aufrufe
929
swa00
swa00
W
  • WuDiDong
Antworten
3
Aufrufe
767
jogimuc
J
S
Antworten
4
Aufrufe
995
Sempervivum
S
Zurück
Oben Unten