[英]Hold the button for 2 seconds and then show an 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;
}
});
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.