OnCreateContextMenu (item text)???

L

litux

Gast
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
 
In meinen Apps hole ich diese Daten in onContextItemMenuSelected( item ) mit item.getMenuInfo() aus dem AdapterContextMenuInfo ab.
 
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?
 
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.
 
w0rmhunter schrieb:
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.

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
 
@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
 
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.
 
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)
 
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.
 
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 :)
 

Ähnliche Themen

J
Antworten
5
Aufrufe
926
swa00
swa00
H
Antworten
4
Aufrufe
609
HTCUserRay
H
H
Antworten
2
Aufrufe
1.308
Hcman
H
Zurück
Oben Unten