0
votes

I try to show a toast when user long press android screen....but nothing showing.Why?Simple touch shows toast " touch " work fine! Where is the error?

public class MainActivity extends Activity {
  Handler handler = new Handler(); 

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);    
}

Runnable mLongPressed = new Runnable() { 
    public void run() { 
        Toast.makeText(getBaseContext(), 
                "Long press",
                Toast.LENGTH_LONG).show();
    }   
};

@Override
public boolean onTouchEvent(MotionEvent event){
    if(event.getAction() == MotionEvent.ACTION_DOWN)
        Toast.makeText(getBaseContext(), 
                " touch ",
                Toast.LENGTH_LONG).show();
        handler.postDelayed(mLongPressed, 1000);
    if((event.getAction() == MotionEvent.ACTION_MOVE)||(event.getAction() == MotionEvent.ACTION_UP))
        handler.removeCallbacks(mLongPressed);
    return super.onTouchEvent(event);
}
2

2 Answers

1
votes

You should use GestureDetector to determine the long press, like the following:

final GestureDetector gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
        public void onLongPress(MotionEvent e) {
            Toast.makeText(getBaseContext(), "Long press", Toast.LENGTH_LONG).show();
        }
    });

    public boolean onTouchEvent(MotionEvent event) {
        return gestureDetector.onTouchEvent(event);
    };
0
votes

Snippet:

public class MainActivity extends Activity implements OnLongClickListener {


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);    

    View yourView = (View) findViewById(R.id.longclickview);
    yourView.setOnLongClickListener(this);
}

@Override
public boolean onLongClick(View v) {
    Toast.makeText(getBaseContext(), 
            "Long press",
            Toast.LENGTH_LONG).show();
    return false;
}