안드로이드 개발 버튼 연속 클릭 방지
전언
버튼을 누르면 연속 클릭을 방지하는 것은 어떤 항목이든 고려해야 할 기능이다.다음은 몇 가지 버튼의 연속 클릭을 방지하는 방법을 소개할 것이다
도구 클래스로 구현
/**
*@content: ,
*@time:2019-5-19
*@build:
*/
public class ButtonDelayUtil {
private static final int MIN_CLICK_DELAY_TIME = 1000;
private static long lastClickTime;
public static boolean isFastClick(){
boolean flag = false;
long curClickTime = System.currentTimeMillis();
if ((curClickTime - lastClickTime) >= MIN_CLICK_DELAY_TIME) {
flag = true;
}
lastClickTime = curClickTime;
return flag;
}
}
사용
mAdapter.setItemClickListener(new PTempEventListAdapter.OnItemClickListener() {
@Override
public void onItemClick(PTempEventListBase.TempEventData tempEventData) {
if (ButtonDelayUtil.isFastClick()){
Intent intent = new Intent(PTempEventListActivity.this, PTempEventDetailActivity.class);
intent.putExtra(PTempEventDetailActivity.APPLY_ID_KEY, tempEventData.getApplyId());
startActivity(intent);
}
}
});
간단하지만 사용할 때도 귀찮아요.코드를 매우 간결하지 못하게 할 수도 있어 보충 방법으로 쓸 수 있다.
다시 쓰기 클릭 OnClickListener 클래스 구현
public abstract class OnForbidClickListener implements View.OnClickListener {
private static final long DELAYED_TIME = 1000;
private long lastTime = 0;
public abstract void forbidClick(View view);
@Override
public void onClick(View v) {
if (System.currentTimeMillis()-lastTime > DELAYED_TIME){
lastTime = System.currentTimeMillis();
forbidClick(v);
}
}
}
사용
mFaceInfoText.setOnClickListener(new OnForbidClickListener() {
@Override
public void forbidClick(View view) {
Intent startFaceHome = new Intent(PParentInfoActivity.this, FaceHomeActivity.class);
startFaceHome.putExtra(FaceHomeActivity.FACE_USER_ID_KEY, mParentId);
startFaceHome.putExtra(FaceHomeActivity.FACE_IDENTITY_TYPE_KEY, 2);
startFaceHome.putExtra(FaceHomeActivity.FACE_SCHOOL_ID_KEY, PSPDataSession.I().getCurrentChildData().getSchoolId());
startActivity(startFaceHome);
}
});
사실 위의 도구 클래스와 유사하지만 실현 방식을 다시 쓰는 클릭 인터페이스 클래스에 넣는 것도 번거롭지만 적어도 코드는 간결하다
전역 부울 값 연속 클릭 방지
사실 위의 두 가지 방식은 여전히 연결될 수 있다. 예를 들어 클릭한 후에 인터넷 요청을 보낼 수 있다. 요청이 완료된 후에finish Activity가 대기 대화상자를 추가해도 대기 대화상자가 닫히면 activity가 닫히려고 할 때 제출 버튼을 계속 누르면 두 번째 인터넷 요청을 촉발할 수 있다.
그래서 아래의 방식은 비교적 번거롭지만, 기능이 연결되는 것을 방지하는 것이 가장 좋은 방법이다.그래서 보통 인터넷 요청에 사용됩니다.
private boolean mPostAddApiing = false;
인터페이스를 요청할 때
mSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (TextUtils.isEmpty(mEditPhoneNumber.getText()) || mEditPhoneNumber.getText().toString().length() < 11) {
Toast.makeText(PParentAddActivity.this, " ", Toast.LENGTH_SHORT).show();
return;
}
if (mEditVerificationCode.getText().toString().length() < 6) {
Toast.makeText(PParentAddActivity.this, " ", Toast.LENGTH_SHORT).show();
return;
}
if (!mPostAddApiing){
mPostAddApiing = true;
postAddApi();
}
}
});
그리고 인터페이스 리셋에서 성공하면 mPostAddApiing을 처리하지 않고finish activity를 직접 닫습니다. 만약activity가 닫기/제출 실패/네트워크 이상/사용자가 자발적으로 요청을 취소하지 않아도 mPostAddApiing=false를 조작하여 버튼 복구를 클릭할 수 있도록 합니다.
물론 아래의 방식과 같이 효과를 얻을 수 있다. 스위치를 원하는 곳에서 클릭을 처리하기만 하면 논리적으로 비교적 은밀하다.
mSubmit.setClickable(false);
posted on
2019-05-22 14:48 관심정독(
...) 설명(
...) 모음 편집
전재 대상:https://www.cnblogs.com/guanxinjing/p/10905850.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.