On-Long-Click-Listener funktioniert nicht

  • Antworten:8
  • Bentwortet
SilverBlue
  • Forum-Beiträge: 45

06.09.2016, 16:52:38 via Website

Ich habe einen Drag-And-Drop Code. Sobald der User ein Item "nimmt", startet der On-Touch-Listener:

Allerdings möchte ich einen On-Long-Click-Listener in meinem Code. Also wenn das Item lange angeklickt wird, soll z.B. eine Toast-Message ausgegeben werden:

Leider funktioniert das ganze nicht, hat jemand einen Rat?

Antworten
SilverBlue
  • Forum-Beiträge: 45

06.09.2016, 16:55:06 via Website

View.OnTouchListener dragListener = new View.OnTouchListener() {
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        // start move on a touch event
        if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
            ClipData data = ClipData.newPlainText("", "");
            View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(view);
            view.startDrag(data, shadowBuilder, view, 0);
         view.setVisibility(View.VISIBLE);
         return true;
     }
     return false;
  }
};

homebutton.setOnLongClickListener(new OnLongClickListener() {
public boolean onLongClick(View arg0) {
Toast.makeText(UserArea.this, "laaaange geklickt", Toast.LENGTH_SHORT).show();
return true;  
}
});

Antworten
swa00
  • Forum-Beiträge: 3.704

06.09.2016, 18:04:14 via Website

Hallo Silver ...

du kannst in den Touchlistener auf UP/DOWN reagieren und ein Zeitglied einbauen ..

Liebe Grüße - Stefan
[ App - Entwicklung ]

Antworten
SilverBlue
  • Forum-Beiträge: 45

06.09.2016, 18:13:48 via Website

hm, okay... und wie bewerkstellige ich das? :-D

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.09.2016, 18:21:47 via App

Oder du kannst bein onTouch immer Return false machen dann sollte der long click auch funktionieren.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
SilverBlue
  • Forum-Beiträge: 45

06.09.2016, 18:29:52 via Website

Mein OnTouchListener:

// OnTouchListener
View.OnTouchListener dragListener = new View.OnTouchListener() {
    @Override
    public boolean onTouch(View Item, MotionEvent motionEvent) {
        // start move on a touch event
        if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
            ClipData data = ClipData.newPlainText("", "");
            View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(Item);
            Item.startDrag(data, shadowBuilder, Item, 0);
            return false;
        }
            return false;

    }
};

Button-Variable

ImageButton Item1= (ImageButton) findViewById(R.id.imgBtnItem1);

OnClickListener

Item1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(UserArea.this, "Item wurde angeklickt", Toast.LENGTH_SHORT).show();
        }
    });

Ich hab erstmal auf OnLongClick verzichtet, bis es überhaupt mal läuft, sollte es OnClick vereinfachen.

Allerdings funktioniert der Code nicht. Drag And Drop funktioniert wie gehabt sehr gut. Doch wenn ich auf das Item1 (imgBtnItem1) klicke, kommt die Toast-Message nicht.

Antworten
SilverBlue
  • Forum-Beiträge: 45

06.09.2016, 18:37:17 via Website

Zum Verständnis, der imgBtn soll anklickbar sein und auch per Drag And Drop nutzbar. Dementsprechend habe ich auch die Zeile

findViewById(R.id.imgBtnItem1).setOnTouchListener(dragListener);

hinzugefügt. Wenn ich die Zeile weglasse, dann ist der imgBtn nicht per per Drag and Drop nutzbar, aber anklickbar.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.09.2016, 19:53:47 via Website

Jupp da der onClick listener auch nur über den Touch event geht.
Kannst diesen Workaround benutzen:
http://stackoverflow.com/a/19670662
Und für longklick fast genauso nur dass du da noch eine Zeit messen musst, und definieren wann ein LongClick ist.

LG Pascal //It's not a bug, it's a feature. :) ;)

swa00

Antworten
SilverBlue
  • Forum-Beiträge: 45

07.09.2016, 15:28:34 via Website

Danke, habe es mit dem Workaround hinbekommen :-)

Antworten