2010-08-31 6 views
10

Ich habe ein ListView mit einigen Elementen darauf. Jede Zeile hat einen TextView und einen Button. Es sieht so aus:TextView und Button in jeder Zeile und onListItemClick()

| Ein Text in Folge (Button) |

Jetzt, wenn ich auf diesen Text klicke, passiert nichts. Es wird einfach keine Funktion aufgerufen. Aber wenn ich auf den Knopf klicke, kann ich mit dem Ereignis umgehen. Ich benutze onListItemClick()

Also was sollte ich anstelle dieses TextView verwenden, um mit einem Ereignis umgehen zu können (wenn ich auf den Text klicke)?

Davor hatte ich nur eine TextView in jeder Zeile und als ich auf eine Zeile geklickt habe, hat alles funktioniert (onListItemClick() wurde aufgerufen).

Vielen Dank im Voraus!

Antwort

9

fügen Sie die Eigenschaft focusable="false" auf Ihre TextView ::

<TextView 
... 
... 
     android:focusable="false" 
     /> 

und wahrscheinlich müssen Sie das gleiche mit den anderen Elementen in Ihrem Listview zu tun.

+1

Danke, es funktioniert. –

+1

Auch wenn dies gut funktioniert, sollten Sie die folgende Lösung in Betracht ziehen, da dies die Navigation von d-pad/trackball korrekt beeinflusst: http://stackoverflow.com/questions/3789943/using-android-how-can-i-select -rows-from-a-listview-which-enthält-button-contro/3791340 # 3791340 – sven

+1

dies wird für textview funktionieren, aber für imagebutton, vielleicht brauchen Sie, legte Code 'v.findViewById (R.id.my_btn). setFocusable (false); 'bei Adapter getView. –

6

Die Herausforderung ist, dass die ListView und die Schaltfläche für den Fokus kämpfen. Normalerweise kann nur einer der beiden den Fokus erhalten (und somit angeklickt werden). In Ihrer Ursache ist der Knopf der fokussierbare.

Um dies anzupassen, können Sie mit der descendantFocusability Eigenschaft des ListView spielen.

Was möchten Sie erreichen, indem Sie eine Schaltfläche innerhalb eines ListView-Elements verwenden? Möchten Sie, dass etwas anderes passiert, wenn Sie auf die Schaltfläche klicken, oder wenn Sie auf das Listenansichtselement außerhalb der Schaltfläche klicken?

+1

Ja, genau wie du gesagt hast, ich möchte die Taste, um verschiedene Aufgaben zu erledigen. Danke für die Erklärung. –

+1

Aber ich habe immer noch ein paar Probleme. Wie du schon sagtest, ich möchte etwas anderes machen, wenn ich auf "click vs" klicke, wenn ich auf den ListView außerhalb der Schaltfläche klicke. Die onListItemClick() wird nur aufgerufen, wenn ich irgendwo auf der Liste, aber nicht auf den Schaltflächen klicke. Ich dachte, ich würde die Ansicht der Schaltfläche von Parameter "v" aus der onListItemClick() erhalten. Also, was würden Sie mir vorschlagen, damit ich das Ereignis des Klickens auf den bestimmten Knopf behandeln kann? –

+1

Dieser Typ: http://stackoverflow.com/questions/2679948/focusable-edittext-inside-listview hat eine Lösung für ein ähnliches Problem, das möglicherweise anwendbar sein könnte ... Denken Sie jedoch daran, dass Menschen schlechtes Ziel haben, wenn sie es versuchen Tippe auf kleine Knöpfe. Im Allgemeinen werden die Leute erwarten, dass sie in der Lage sind, irgendwo in die Reihe eines ListViews zu klicken, da so die meisten Apps funktionieren. Vielleicht möchten Sie Ihre Benutzeroberfläche überdenken, um geschachtelte anklickbare Bereiche zu vermeiden. –

Verwandte Themen