On-Long-Click-Listener funktioniert nicht

  • Antworten:8
  • OffenNicht stickyBentwortet
  • 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?

  • 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;  
}
});
  • Forum-Beiträge: 2.214

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 ]

Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 9.319

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

  • 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.

  • 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.

Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 9.319

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