Android/Reference

ClickCountListener (특정횟수 클릭 리스너)

bumjae 2021. 12. 10. 17:12
프로젝트를 진행하다가 안드로이드의 개발자옵션처럼 빌드번호를 여러 번 클릭해
개발자옵션을 켜는 것과 비슷하게 클릭 횟수를 Count 해서 특정 코드를 실행하는 Listener가 필요했다.

 

배치되어 있는 버튼에 사용하였으면 바로 Activity나 Fragment에서 처리가 가능하겠지만 RecyclerView의 Item을 클릭 시 처리를 해야 했기 때문에 Click Listener를 Item에 따로 지정해주는 방식으로 작성했다.

 

Kotlin을 주로 사용하였지만 이번 프로젝트는 Java로 진행하여 시간이 날 때 코틀린으로 작성할 것이다.

일단 따로 Item에 지정해줄 ClickListener를 만들었다.

public abstract class OnClickCountListener implements View.OnClickListener {
    private long CLICK_INTERVAL = 500;
    private long lastClickedTime = 0;
    private int count = 0;

    public abstract void onCountClick(View v);

    private long isSafe(){
        return SystemClock.uptimeMillis() - lastClickedTime;
    }

    @Override
    public void onClick(View v) {
        count++;
        
        if (count == 15){
            onCountClick(v);
            count = 0;
        }

        // CLICK_INTERVAL 시간 이내로 안누르면 초기화
        if (isSafe() > CLICK_INTERVAL) {
            count = 0;
        }
        lastClickedTime = SystemClock.uptimeMillis();
    }
}

코드는 Click 시 count를 늘려 15번을 클릭하면 추상 메소드를 실행하게 되는데

CLICK_INTERVAL( 1000 = 1초)을 지정해 Click 했던 시간을 새로 Click 한 시간과 비교해 초과되면 count를 초기화하였다.

 - 코드의 의도는 Click 마다 0.5초 안에 15번을 Click 하면 해당 추상 메소드를 실행한다.

 

그 후 Recycler Item Click 처리를 위해 생성한 Listener를 Adapter에 생성자로 넘겨준 후

 

onBindViewHolder를 탔을 때 원하는 View에 Listener를 등록해주었다.

 

Activity나 Framgnet 단에서 clickCountListener를 만들고 실행할 코드를 넣어

private OnClickCountListener clickCountListener = new OnClickCountListener() {
        @Override
        public void onCountClick(View v) {
            Toast.makeText(getContext(), "15번 클릭 완료",Toast.LENGTH_SHORT);
            
            //특정횟수 클릭 후 실행할 코드
        }
};

 

Adapter를 생성할 때 같이 넣어주고 RecyclerView를 구성하면 끝

 

 

결과화면

소프트웨어 버전 여러번 클릭시 화면 이동