onClickListener를 설정 한 textView가 있습니다. 사용자가 7 초 동안 손가락을 뗀 상태에서 들어 올리면 양수 버튼을 클릭하면 의도를 벗어난 대화 상자가 표시되고 음수 버튼을 클릭하면 작업이 취소됩니다. 사용자가 textView를 오랫동안 누르고있을 때 시각적 큐를 원했기 때문에 7000ms 후에 트리거하고 루트 뷰의 배경색을 약간 변경하는 핸들러와 runnable을 만들었습니다. 처음에는 훌륭하게 작동합니다. 사용자가 7 초 동안 누르고 있으면 배경이 바뀌고 손가락을 들어서 대화 상자를 표시 할 수 있습니다. 취소하면 모든 것이 배경색을 포함하여 정상으로 돌아갑니다. 문제는 사용자가 7 초 전에 손가락을 떼면 MotionEvent.ACTION_UP에서 처리기를 취소하는 방법을 모른다는 것입니다. 여기 내 코드입니다 :실행 전에 실행 파일/처리기 취소
View.OnTouchListener listener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final Handler handler = new Handler();
final Runnable runnable = new Runnable(){
@Override
public void run(){
Toast.makeText(mContext, "This is working", Toast.LENGTH_SHORT).show();
mMainContainer.setBackgroundColor(getResources().getColor(R.color.alert_color));
}
};
View rootView = LayoutInflater.from(mContext).inflate(R.layout.admin_dialog, null);
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// get the first touch in the series
start = System.currentTimeMillis();
handler.postDelayed(runnable, 7000);
}
if (event.getAction() == MotionEvent.ACTION_UP) {
handler.removeCallbacks(runnable);
stop += System.currentTimeMillis();
if ((stop - start) > 7000){
// reset values
start = 0;
stop = 0;
final EditText password = (EditText)rootView.findViewById(R.id.admin_password_et);
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext)
.setView(rootView)
.setTitle("Edit Configuration?")
.setPositiveButton(R.string.yes_button, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
int counter = 1;
if(password.getText().toString().equalsIgnoreCase("mq")){
Intent intent = new Intent(mContext, MainActivity.class);
startActivity(intent);
} else {
mMainContainer.setBackgroundColor(getResources().getColor(android.R.color.background_light));
Toast.makeText(mContext, "Wrong password, Access denied", Toast.LENGTH_SHORT)
.show();
dialog.dismiss();
}
}
})
.setNegativeButton(R.string.no_button, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mMainContainer.setBackgroundColor(getResources().getColor(android.R.color.background_light));
dialog.dismiss();
}
});
dialog.create();
dialog.show();
} else {
// reset values
start = 0;
stop = 0;
}
}
return true;
}
};
mAppTitle.setOnTouchListener(listener);
내가 handler.removeCallbacks 호출 (실행 가능한)를 생각했다; 대답 이었지만 작동하지 않았습니다. 텍스트 뷰를 누르고 7 초 전에 손가락을 떼면 대화 상자가 나타나지 않지만 7 초 후에는 배경색이 변경됩니다. 어떻게 그 작업을 취소 할 수 있습니까? 이 방법을 다르게 구현해야합니까?
그래, 알아 냈어. 왜 내가이 문제를 겪고 있는지 정확하게 파악 했으므로이 대답에 대한 신뢰를 표시합니다. 나는 그것을 알아 냈다. 그러나 나는 또한 안드로이드가 제공하는 CountDownTimer 클래스를 발견했다. 우리의 솔루션은 모두 작동하지만 나 자신을 더 잘 설명해야합니다. 좋은 직업과 감사 :) –