我有一个按钮,当我按住按钮2秒时,我想显示AlertDialog。
这就是我尝试过的:
btn.setOnTouchListener(new OnSwipeTouchListener(getContext()) {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
Helper.setTimeout(() -> {
if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
AlertDialog.Builder builder = new AlertDialog.Builder(getContext());
builder.setTitle("Message");
builder.setMessage(text);
builder.show();
System.out.println("I am text");
}
}, 2000);
return super.onTouch(view, motionEvent);
}
}
我的方法setTimeout((:
public static void setTimeout(Runnable runnable, int delay){
new Handler(Looper.getMainLooper()).postDelayed(runnable, delay);
}
我的问题是,有时AlertDialog会显示多次,我总是收到这样的警告:
W/InputEventReceiver:试图完成输入事件,但输入事件接收器已被释放。
我做错了什么?
我不知道是否有更好的解决方案。我也试过
btn.setOnLongClickListener(v -> {
System.out.println("hold");
return true;
});
但这不会产生任何结果。
你可以试试这个
public class MainActivity extends AppCompatActivity {
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.button);
button.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Message");
builder.setMessage("hello");
builder.show();
}
}, 2000);
return false;
}
});
}
}