1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

OnCreateContextMenu (item text)???

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von litux, 09.04.2011.

  1. litux, 09.04.2011 #1
    litux

    litux Threadstarter Junior Mitglied

    Beiträge:
    41
    Erhaltene Danke:
    0
    Registriert seit:
    24.06.2009
    Hi Leute,
    ich hab ein kleines Problem bezüglich OnCreateContextMenu.
    Also ich möchte, dass wenn man auf einen Listeneintrag etwas länger drückt, eine menü erscheint...
    Soweit alles ok...

    Wie kann ich nun den Text von dem Listeneintrag, auf den ich länger gedrückt habe, weiter geben?

    Hoffe meine Frage ist verständlich
     
  2. DieGoldeneMitte, 09.04.2011 #2
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    In meinen Apps hole ich diese Daten in onContextItemMenuSelected( item ) mit item.getMenuInfo() aus dem AdapterContextMenuInfo ab.
     
  3. litux, 09.04.2011 #3
    litux

    litux Threadstarter Junior Mitglied

    Beiträge:
    41
    Erhaltene Danke:
    0
    Registriert seit:
    24.06.2009
    Ja das hab ich schon versucht... da bekomme ich das hier:

    android.widget.AdapterView$AdapterContextMenuInfo@40523ca0

    oder muss damit noch was anderes andstellen damit man den richtigen text raus bekommt?
     
  4. w0rmhunter, 09.04.2011 #4
    w0rmhunter

    w0rmhunter Neuer Benutzer

    Beiträge:
    10
    Erhaltene Danke:
    3
    Registriert seit:
    13.02.2011
    das sieht so aus als hättest du einfach die toString() methode vom menuInfo aufgerufen. Das kannst du aber so nicht machen.
    mit dem menuInfo kannst du die position des geklickten eintrags herausfinden mit menuInfo.position . Da du die position dann kennst kannst du dann auch den jeweiligen eintrag aus deinem ListView finden.
     
  5. litux, 09.04.2011 #5
    litux

    litux Threadstarter Junior Mitglied

    Beiträge:
    41
    Erhaltene Danke:
    0
    Registriert seit:
    24.06.2009
    ich glaube du sprichst hier von onListItemClick, oder???
    wenn ja dann hast du meine frage falsch verstanden, wenn nein dann erkläre bitte genauer was du damit meinst...

    danke
     
  6. litux, 09.04.2011 #6
    litux

    litux Threadstarter Junior Mitglied

    Beiträge:
    41
    Erhaltene Danke:
    0
    Registriert seit:
    24.06.2009
    @w0rmhunter:
    sorry du hast das schon richtig gesagt gehabt...
    jetzt hab ich es verstanden...
    also ich hole jetzt die ids der einzelnen einträge so raus..

    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();

    info.id ist dann die id des eintrages.

    danke nochmal
     
  7. w0rmhunter, 09.04.2011 #7
    w0rmhunter

    w0rmhunter Neuer Benutzer

    Beiträge:
    10
    Erhaltene Danke:
    3
    Registriert seit:
    13.02.2011
    noch einfacher ist es mit info.targetView zu arbeiten. Ich vermute deine Einträge sind einfache TextViews? Wenn ja dann kannst du einfach mit ((TextView) info.targetView).getText() den Text rausbekommen.
     
  8. litux, 09.04.2011 #8
    litux

    litux Threadstarter Junior Mitglied

    Beiträge:
    41
    Erhaltene Danke:
    0
    Registriert seit:
    24.06.2009
    ja ich habe eine linearlayout mit ein textview darin...
    aber wenn ich das was du geschrieben hab, schreibe, bekomme ich eine fehlermeldung vom android system.

    Hier die Meldung:

    04-09 20:57:53.167: ERROR/AndroidRuntime(11029): FATAL EXCEPTION: main
    04-09 20:57:53.167: ERROR/AndroidRuntime(11029): java.lang.ClassCastException: android.widget.LinearLayout
    04-09 20:57:53.167: ERROR/AndroidRuntime(11029): at deblabla.bla.onContextItemSelectedListe.java:133)
    04-09 20:57:53.167: ERROR/AndroidRuntime(11029): at android.app.Activity.onMenuItemSelected(Activity.java:2209)
    04-09 20:57:53.167: ERROR/AndroidRuntime(11029): at com.android.internal.policy.impl.PhoneWindow$ContextMenuCallback.onMenuItemSelected(PhoneWindow.java:2785)
    04-09 20:57:53.167: ERROR/AndroidRuntime(11029): at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:143)
    04-09 20:57:53.167: ERROR/AndroidRuntime(11029): at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:855)
    04-09 20:57:53.167: ERROR/AndroidRuntime(11029): at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:137)
    04-09 20:57:53.167: ERROR/AndroidRuntime(11029): at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:873)
    04-09 20:57:53.167: ERROR/AndroidRuntime(11029): at android.widget.AdapterView.performItemClick(AdapterView.java:284)
    04-09 20:57:53.167: ERROR/AndroidRuntime(11029): at android.widget.ListView.performItemClick(ListView.java:3513)
    04-09 20:57:53.167: ERROR/AndroidRuntime(11029): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1812)
    04-09 20:57:53.167: ERROR/AndroidRuntime(11029): at android.os.Handler.handleCallback(Handler.java:587)
    04-09 20:57:53.167: ERROR/AndroidRuntime(11029): at android.os.Handler.dispatchMessage(Handler.java:92)
    04-09 20:57:53.167: ERROR/AndroidRuntime(11029): at android.os.Looper.loop(Looper.java:123)
    04-09 20:57:53.167: ERROR/AndroidRuntime(11029): at android.app.ActivityThread.main(ActivityThread.java:3683)
    04-09 20:57:53.167: ERROR/AndroidRuntime(11029): at java.lang.reflect.Method.invokeNative(Native Method)
    04-09 20:57:53.167: ERROR/AndroidRuntime(11029): at java.lang.reflect.Method.invoke(Method.java:507)
    04-09 20:57:53.167: ERROR/AndroidRuntime(11029): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    04-09 20:57:53.167: ERROR/AndroidRuntime(11029): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    04-09 20:57:53.167: ERROR/AndroidRuntime(11029): at dalvik.system.NativeStart.main(Native Method)
     
  9. w0rmhunter, 09.04.2011 #9
    w0rmhunter

    w0rmhunter Neuer Benutzer

    Beiträge:
    10
    Erhaltene Danke:
    3
    Registriert seit:
    13.02.2011
    Da du ein LinearLayout mit einem TextView drin hast, geht das nicht.
    Das Feld info.targetView gibt dir ja den View der geklickt wurde zurück. Meine Annahme war dass es ein TextView ist, daher hab ich durch ((TextView) info.targetView) den View zum TextView gecastet, um an die TextView spezifische methode getText() ranzukommen. Da es aber kein TextView sondern ein LinearLayout war, kam eben diese ClassCastException, es wurde also falsch gecastet.
    Um also jetzt an den Text des TextViews ranzukommen, musst du folgendes machen:
    ((TextView) ((LinearLayout) info.targetView).getChildAt(x)).getText() . Wobei x hier die position des TextViews im LinearLayout ist. Falls es der erste oder einzige View ist, musst du x durch 0 ersetzen.
    Also was ich hier jetzt gemacht hab: wie du schon gesagt hast, ist der targetView ein LinearLayout, also hab ich den entsprechend gecastet, um seine Methode getChildAt(int) benutzen zu können. Diese Methode Liefert uns den View an position x. Wenn du das x richtig gewählt hast, sollte das ein TextView sein, also hab ich das ganze dann zusätzlich zum TextView gecastet, somit konnte ich dann die Methode getText() verwenden, die den Text vom TextView zurückgibt.
    Falls dich das mit dem casten noch verwirrt, rate ich dir mal ein paar Beispiele und Tutorials zum Thema casten durchzulesen.
     
  10. litux, 09.04.2011 #10
    litux

    litux Threadstarter Junior Mitglied

    Beiträge:
    41
    Erhaltene Danke:
    0
    Registriert seit:
    24.06.2009
    nein es verwirrt mich nicht, ich wusste nur nicht dass man layout elemente auch casten kann...
    aber jetzt weiss ich wie das gemeit ist und wie ein verschachtelter layout gecastet wird.

    vielen dank :)
     

Diese Seite empfehlen