Android 방지 단 추 를 누 르 면 예제 코드 를 반복 클릭 합 니 다.
역할:이 라 이브 러 리 는 버튼 의 중복 클릭 을 방지 하고 네트워크 상 태 를 판단 할 수 있 으 며 사용자 로그 인 상태 와 사용자 정의 인증 조건 등 을 판단 할 수 있 습 니 다.
설명:그 실현 의 핵심 원 리 는 사용자 정의 로 자신의 OnClickListener 류 를 실현 하고 그 중의 onClick 방법 을 다시 쓰 는 것 이다.onClick 방법 에서 해당 하 는 판단 논 리 를 실행 한 후에 우리 가 사용자 정의 추상 적 인 방법 을 되 돌려 주 는 것 이다.
구체 적 인 효 과 는 다음 그림 과 같다.
사용 방식
여러 번 클릭 이벤트 차단
/**
*
*/
fastButton.setOnClickListener(new OnClickFastListener() {
/**
* , onClick ,
*/
@Override
public void onFastClick(View v) {
Toast.makeText(mContext, " ...", Toast.LENGTH_LONG).show();
}
});
이 곳 의 fastButton 은 일반적인 단추 구성 요소 입 니 다.그리고 이 구성 요소 에 클릭 이 벤트 를 설정 하고 사용자 정의 OnClickListener 클래스 를 입력 합 니 다.(여기 서 설명 할 것 은 button 구성 요소 뿐만 아니 라 모든 View 구성 요소 의 클릭 이벤트 도 가능 합 니 다.여 기 는 Button 구성 요 소 를 예 로 들 뿐 입 니 다)이 곳 의 기본 적 인 차단 이벤트 의 시간 간격 은 900 ms 입 니 다.즉,우리 가 구성 요소 에 사용자 정의 클릭 이벤트 감청 을 설정 한 후에 두 번 의 클릭 이벤트 가 있 고 두 번 째 클릭 할 때 첫 번 째 클릭 이벤트 가 0.9s 보다 작 으 면 두 번 째 클릭 은 효과 가 없습니다.네트워크 상황 차단
/**
*
*/
networkButton.setOnClickListener(new OnClickNetworkListener() {
/**
* ,
*/
@Override
public void onNetworkClick(View v) {
Toast.makeText(mContext, " , ...", Toast.LENGTH_LONG).show();
}
/**
* ,
*/
@Override
public void onNoNetworkClick(View v) {
Toast.makeText(mContext, " ...", Toast.LENGTH_LONG).show();
}
});
마찬가지 로,이 곳 의 network Button 도 우리 가 사용자 정의 한 단추 구성 요소 입 니 다.우 리 는 이 벤트 를 클릭 하여 감청 하고 사용자 정의 OnNetworkClickListener 류 를 입력 했 습 니 다.OnNetworkClickListener 류 에는 두 가지 리 셋 방법 이 있 습 니 다.그 중에서 onNetworkClick 방법 은 현재 장치 에 네트워크 가 있 는 상황 을 실행 하 는 데 사 용 됩 니 다.한편,onNoNetworkClick 방법 은 현재 장치 에 네트워크 가 없 는 후속 작업 을 처리 하 는 데 사 용 됩 니 다.로그 인 여부 차단
/**
*
*/
loginButton.setOnClickListener(new OnClickLoginedListener(mContext) {
/**
* ,
*/
@Override
public boolean isLogined(Activity context, View view) {
return false;
}
/**
*
*/
@Override
public void onLoginedClick(View v) {
Toast.makeText(mContext, " , ...", Toast.LENGTH_LONG).show();
}
/**
*
*/
@Override
public void onNoLoginedClick(View v) {
Toast.makeText(mContext, " , ...", Toast.LENGTH_LONG).show();
}
});
이 곳 의 loginButton 역시 우리 가 정의 한 단추 구성 요소 이 며,이 를 위해 우리 의 OnLogined ClickListener 류 를 설정 한 다음,그 중 세 가지 반전 방법 이 있 습 니 다.그 중에서 방법 isLogined 는 현재 사용자 의 로그 인 여 부 를 판단 하 는 데 사용 되 고 true 로 돌아 가면 사용자 가 로그 인 했 음 을 나타 내 며 false 로 돌아 가면 사용자 가 로그 인 하지 않 았 음 을 나타 낸다.구체 적 으로 논 리 를 실현 하려 면 업무 층 에서 이 루어 져 야 한다.방법 onLoginedClick 은 로그 인 후의 논 리 를 실행 하 는 데 사용 되 고 방법 onNoLoginedClick 은 사용자 가 로그 인 하지 않 은 논 리 를 실행 하 는 데 사용 된다.
이것 이 바로 이 라 이브 러 리 의 대략적인 실현 기능 이다.기능 을 말 한 후에 우 리 는 그 구체 적 인 실현 논 리 를 살 펴 보 자.
실현 방식
위 에서 우 리 는 이 라 이브 러 리 의 사용 방식 을 설명 하 였 는데,그러면 우 리 는 어떻게 실현 하 였 습 니까?다음은 이 라 이브 러 리 의 소스 코드 를 살 펴 보 겠 습 니 다.
버튼 중복 클릭 방지
/**
*
*/
public abstract class OnClickFastListener extends BaseClickListener {
// 900ms
private long DELAY_TIME = 900;
private static long lastClickTime;
private boolean isFastDoubleClick() {
long time = System.currentTimeMillis();
long timeD = time - lastClickTime;
if (0 < timeD && timeD < DELAY_TIME) {
return true;
}
lastClickTime = time;
return false;
}
@Override
public void onClick(View v) {
//
if (isFastDoubleClick()) {
return;
}
onFastClick(v);
}
/**
*
* @param delay_time
* @return
*/
public OnClickFastListener setLastClickTime(long delay_time) {
this.DELAY_TIME = delay_time;
return this;
}
/**
*
* @param v
*/
public abstract void onFastClick(View v);
}
이상 은 우리 가 단 추 를 중복 클릭 하 는 것 을 방지 하 는 OnFastClickListener 의 소스 코드 입 니 다.여기 서 우 리 는 중복 클릭 을 방지 하 는 OnClickListener 대상 을 정의 하고 onClick 방법 을 다시 썼 습 니 다.onClick 방법 에서 isFastDoubleClick 방법 을 호출 한 것 을 볼 수 있 습 니 다.이 방법 은 반복 클릭 논 리 를 실현 하 는 지 구체 적 으로 실현 하 는 것 입 니 다.버튼 이 지난번 에 클릭 한 시간 과 이번 클릭 한 시간 간격 이 900 ms 이하 일 때 isFastDoubleClick 방법 은 true 로 돌아 갑 니 다.이때 onClick 방법 은 바로 돌아 갑 니 다.후속 onFastClick 방법 을 실행 하지 않 으 면 onFastClick 방법 을 직접 실행 합 니 다.그리고 저 희 는 View 구성 요 소 를 위해 클릭 이 벤트 를 설정 할 때 onFastClick 방법 만 다시 쓰 면 됩 니 다...단 추 를 누 르 면 네트워크 상황 을 감청 합 니 다.
/**
*
*/
public abstract class OnClickNetworkListener extends BaseClickListener {
@Override
public void onClick(View v) {
boolean isNetworkOk = isNetworkConnected(v.getContext());
if (isNetworkOk) {
onNetworkClick(v);
} else {
onNoNetworkClick(v);
}
}
// --
public abstract void onNetworkClick(View v);
// --
public abstract void onNoNetworkClick(View v);
/**
*
*
* @param context
* @return
*/
public static boolean isNetworkConnected(Context context) {
if (context != null) {
ConnectivityManager mConnectivityManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mNetworkInfo = mConnectivityManager.getActiveNetworkInfo();
if (mNetworkInfo != null) {
return mNetworkInfo.isAvailable();
}
}
return false;
}
}
방금 방지 단 추 를 누 르 면 이벤트 가 반복 되 는 것 과 유사 합 니 다.이 방법 은 현재 장치 에 네트워크 가 있 는 지,네트워크 가 있 으 면 onNetworkClick 방법 을 실행 하고 네트워크 가 없 으 면 onNoNetworkConnect 방법 을 실행 하 는 것 입 니 다.이렇게 하면 우리 가 자신의 View 구성 요소 에 클릭 이 벤트 를 설정 할 때 View 구성 요소 에 onClickListener 가 사용자 정의 OnClickListener 대상 을 설정 한 다음 에 그 중의 onNetworkClick 과 onNoNetworkClick 방법 을 다시 써 야 합 니 다.그 중에서 onNetworkClick 방법 은 네트워크 가 있 는 리 셋 방법 이 고 onNoNetworkClick 방법 은 네트워크 가 없 는 리 셋 방법 입 니 다.로그 인 여 부 를 확인 하려 면 단 추 를 누 르 십시오.
/**
* App
*/
public abstract class OnClickLoginedListener extends BaseClickListener {
private Activity context = null;
public OnClickLoginedListener(Activity context) {
this.context = context;
}
@Override
public void onClick(View view) {
super.onClick(view);
if (isLogined(context, view)) {
onLoginedClick(view);
} else {
onNoLoginedClick(view);
}
}
/**
*
* @param context
* @param view
* @return
*/
public abstract boolean isLogined(Activity context, View view);
/**
*
* @param v
*/
public abstract void onLoginedClick(View v);
/**
*
*/
public abstract void onNoLoginedClick(View v);
}
이것 도 자신의 OnClickListener 클래스 를 정의 한 다음 에 그 중의 onClick 방법 을 다시 쓰 고 그 중에서 isLogined 방법 을 실행 합 니 다.이 방법 은 사용자 가 로그 인 했 는 지 의 논리 적 판단 을 되 돌려 주 는 데 사용 되 고 추상 적 인 방법 이기 때문에 저희 가 업무 층 에서 구체 적 인 논 리 를 실현 해 야 합 니 다.그 다음 에 저 희 는 그 중의 onLoginedClick 방법 과 onNoLoginedClick 방법 을 다시 썼 습 니 다.그 중에서 onLoginedClick 방법 은 사용자 가 로그 인 한 후의 리 셋 방법 이 고 onNoLoginedClick 방법 은 사용자 가 로그 인하 지 않 은 후에 실 행 된 리 셋 방법 입 니 다.상응하는 업무 논 리 를 맞 춤 형 으로 집행 하 다.
/**
*
*/
public abstract class OnClickCostomListener extends BaseClickListener {
@Override
public void onClick(View view) {
super.onClick(view);
if (isCorrect()) {
onCorrentClick(view);
} else {
onNoCorrentClick(view);
}
}
/**
*
* @return
*/
public abstract boolean isCorrect();
/**
*
* @param v
*/
public abstract void onCorrentClick(View v);
/**
*
* @param v
*/
public abstract void onNoCorrentClick(View v);
}
OnClickListener 클래스 를 다시 정의 한 다음 에 그 중의 onClick 방법 을 다시 작성 합 니 다.먼저 판단 방법 인 isCorrect 를 실행 한 다음 에 판단 이 통과 되면 onCorrentClick 방법 을 실행 하고 판단 이 통과 되 지 않 으 면 onNoCorrentClick 방법 을 실행 합 니 다.이렇게 해서 우 리 는 버튼 이 라 이브 러 리 를 반복 적 으로 클릭 하 는 것 을 방지 하 는 주요 한 논리 와 기능 을 분석 했다.소스 코드 는 매우 간단 하 다.앞으로 저 는 끊임없이 소스 를 열 고 좋 은 라 이브 러 리 를 업데이트 할 것 이 니 여러분 들 의 많은 지 지 를 바 랍 니 다.
요약:
이 라 이브 러 리 는 주로 OnClickListener 클래스 를 사용자 정의 하고 그 중의 onClick 방법 을 다시 작성 하여 이 루어 집 니 다.
리 셋 방법 을 추상 적 인 방법 으로 설정 함으로써 우 리 는 반드시 상응하는 리 셋 방법 을 다시 써 야 한다 고 보장 했다.
프로젝트 저장 주소:Android-repeatclick환영 스타 와 follow
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.