android:onClick parallel zu onclicklistener?

  • Antworten:11
A. N.
  • Forum-Beiträge: 23

22.03.2013, 11:05:08 via Website

Hey Leute ich habe ein mittelschweres Problem.

Die Vorgeschichte ist egal, jedenfalls ist es aufgrund der bisherigen Programmierung der App nötig, mehreren Buttons einen OnTouchListener UND eine Reaktion auf android:onClick zuzuweisen, da sich diese layoutbedingt unterscheiden.

Hab mit der SuFu leider nichts gefunden, weil alle nur über die Unterschiede reden; Definitionen brauche ich jetzt nicht, ich meine, das Thema verstanden zu haben.

Auf den Listener reagieren die Buttons tadellos, genau so hab ich auch Buttons gemacht die nur auf android:onClick reagieren, was auch funktioniert. Sobald ich den Buttons nun aber beides zuweisen möchte, verachtet das System den android:onClick und nur der Listener handelt.


Ich wäre euch so dankbar, hättet ihr eine Lösung.

tl;dr? OnTouchListener UND android:onClick auf den gleichen Button

Antworten
A. N.
  • Forum-Beiträge: 23

22.03.2013, 11:20:48 via Website

Danke erstmal, fällt dir denn eine andere Lösung ein?

Antworten
A. N.
  • Forum-Beiträge: 23

22.03.2013, 11:32:15 via Website

Ja, das klingt vereinfacht natürlich auch super.
Der Punkt ist bloß, ich BRAUCHE wirklich verschiedene Funktionalitäten auf verschiedenen Layouts..

Antworten
knucKles
  • Forum-Beiträge: 33

22.03.2013, 11:39:13 via Website

Hallo A. N.!

Rafael hat zwar Recht, wenn er sagt „set“ weist auf nur einen Listener hin, aber du willst ja nicht mehrere ClickListener setzen, sondern einen Click und einen Touch Listener.

Hier zwei Lösungsansätze für dein Problem:

1.) In deiner Implementierung von „onTouchEvent(MotionEvent motionEvent) { ... }“, steht am Ende ein „return true;“. Das ändern in „return super.onTouchEvent(motionEvent)“.

Dier Erklärung dafür aus den Docs:
onTouch() - This returns a boolean to indicate whether your listener consumes this event. The important thing is that this event can have multiple actions that follow each other. So, if you return false when the down action event is received, you indicate that you have not consumed the event and are also not interested in subsequent actions from this event. Thus, you will not be called for any other actions within the event, such as a finger gesture, or the eventual up action event.
Du überschreibst die onTouch Methode wahrscheinlich, weshalb das Event als konsumiert markiert wird und nicht weitergeleitet wird. Durch den Aufruf der Implementierung aus der Superklasse, solltest du bekommen, was du haben möchtest.

2.) Alle dieser Eigenschaften auf true setzen:
view.setClickable(true);
view.setEnabled(true);
view.setFocusable(true);
view.setFocusableInTouchMode(true);

Probier das doch mal aus und sag mir, ob es funktioniert hat.

Beste Grüße,
knucKles

Antworten
knucKles
  • Forum-Beiträge: 33

22.03.2013, 11:45:40 via Website

Er hatte sich, glaube ich, in der Überschrift auch verschrieben. ;)

Antworten
A. N.
  • Forum-Beiträge: 23

23.03.2013, 12:51:25 via Website

Nein, ich hatte mich nun leider nicht in der Überschrift verschrieben an der Stelle an der ihr es denkt xD

Ich möchte wirklich

-einen onTouch/onClick (ist egal welcher) für alle Layouts
und
-einen android:onClick, der XML-spezifisch pro Layout eine andere Methode aufruft

Antworten
impjor
  • Forum-Beiträge: 1.793

23.03.2013, 17:28:24 via App

Warum speicherst du nicht, welches layout gerade geladen ist und entscheidet dann im onClickListener, was zu tun ist ( je nach layout)

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
A. N.
  • Forum-Beiträge: 23

08.04.2013, 03:13:05 via Website

So hatte ich's auch schon gemacht, danke trotzdem für den Rat. Mich hat dabei gestört, dass dieser Code dann wirklich unschön war.
Hab aber letztendlich keine Performanceprobleme :)

Danke nochmal an alle, die helfen wollten.

Antworten