onContextItemSelected wird nicht aufgerufen

  • 2 Antworten
  • Letztes Antwortdatum
S

snatch

Neues Mitglied
1
Hallo,

Ich bin gerade dabei ein Context Menü in meiner App einzubauen. Nun möchte ich das Menü über eine Klasse steuern also auch, dass bei einem Select die onContextItemSelected der Klasse aufgerufen wird.
Das stellt sich scheinbar komplizierter dar als ich dachte oder ich mache irgendwas falsch. Zweiteres scheint mir jedenfalls eher der Fall zu sein.

Ich habe gemerkt, dass wenn ich die Funktion onContextItemSelected in meiner Main Klasse überschreibe, dass ganze funktioniert. Das soll aber nicht Sinn der Sache sein.
Auch setOnCreateContextMenuListener(this); schafft keine Abhilfe.

Hier die Klasse:
Code:
public class Stack extends Activity {

    private Button b;

    Stack(Button b) {
        this.b = b;

        this.registerForContextMenu(this.b);
        this.b.setOnCreateContextMenuListener(this);
        this.openContextMenu(this.b);
        this.unregisterForContextMenu(this.b);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.setHeaderTitle(R.string.m);
        menu.add(0, v.getId(), 0, R.string.m1);
        menu.add(0, v.getId(), 0, R.string.m2);
        menu.add(0, v.getId(), 0, R.string.m3);
        menu.add(0, v.getId(), 0, R.string.m4);
        menu.add(0, v.getId(), 0, R.string.m5);
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        Log.d("DEBUG_TAG", "menu click");

        if (item.getTitle().equals(getString(R.string.m1))) {
            Toast.makeText(this, R.string.m1, Toast.LENGTH_SHORT).show();
            Log.d("DEBUG_TAG", "abc");
        } else if (item.getTitle().equals(getString(R.string.m2))) {
            Toast.makeText(this, R.string.m2, Toast.LENGTH_SHORT).show();
        } else if (item.getTitle().equals(getString(R.string.m3))) {
            Toast.makeText(this, R.string.m3, Toast.LENGTH_SHORT).show();
        } else if (item.getTitle().equals(getString(R.string.m4))) {
            Toast.makeText(this, R.string.m4, Toast.LENGTH_SHORT).show();
        } else if (item.getTitle().equals(getString(R.string.m5))) {
            Toast.makeText(this, R.string.m5, Toast.LENGTH_SHORT).show();
        } else {
            return false;
        }

        return true;
    }

}
Würde mich freuen, wenn mir da jemand helfen könnte.
Schon mal vielen Dank und einen angenehmen Dienstag Abend.
 
Ohne mir das jetzt im Detail angeguckt zu haben.
Ich glaube das geht nicht.
onContextItemSelected gehört immer zu einer Activity, und nur in dieser wird der Callback aufgerufen.

Und da ich vermute das der dein Stack nicht die Activity ist, die gerade aufgerufen wird.
 
Danke für deine Antwort.
Meine kommt zwar ein wenig spät, aber ich habe das Problem jetzt anders gelöst. Du hattest auf jeden Fall Recht damit, dass onContextItemSelected nur in der Activity selbst ausgelöst werden kann.

Hab das ganze dann mit einem ListView gemacht. Funktioniert ganz gut.
 
Zurück
Oben Unten