按住该按钮2秒钟,然后显示AlertDialog(警报对话框)



我有一个按钮,当我按住按钮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;
}
});
}
}

最新更新