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

좋은 웹페이지 즐겨찾기