Butterknife.OnClick에서 버튼을 너무 빨리 누르는 것을 방지하는 해결 방안
7271 단어 Android
@OnClick({R.id.record, R.id.combine})
public void onClick(View view) {
if (AntiShake.check(view.getId())) { //
return;
}
switch (view.getId()) {
case R.id.hos_detail_visit_record:
//todo
break;
case R.id.combine_chart:
//todo
}
}
구현 방법은 다음과 같습니다.
첫 번째 유형은 NoDouble ClickListener가 두 번 클릭한 시간을 판단하는 것과 유사하다
public class OneClick {
private String methodName;
private static final int CLICK_DELAY_TIME = 1000;
private long lastClickTime = 0;
public OneClick(String methodName) {
this.methodName = methodName;
}
public String getMethodName() {
return methodName;
}
public boolean check() {
long currentTime = Calendar.getInstance().getTimeInMillis();
if (currentTime - lastClickTime > CLICK_DELAY_TIME) {
lastClickTime = currentTime;
return false;
} else {
return true;
}
}
}
두 번째 종류의 정적 변수는 클릭 이벤트를 저장하고 맞춤형 저장의 수량은 자동으로 삭제할 수 있는 이전의 수량을 초과한다.
public class AntiShake {
private static LimitQueue queue = new LimitQueue<>(20);
public static boolean check(Object o) {
String flag;
if(o == null) {
flag = Thread.currentThread().getStackTrace()[2].getMethodName();
} else {
flag = o.toString();
}
for (OneClick util : queue.getArrayList()) {
if (util.getMethodName().equals(flag)) {
return util.check();
}
}
OneClick clickUtil = new OneClick(flag);
queue.offer(clickUtil);
return clickUtil.check();
}
}
세 번째 종류는 일정한 대상을 저장하는 체인표로 정의된 범위를 넘어서면 첫 번째 대상을 삭제한다
public class LimitQueue {
private int limitedSize;
private LinkedList linkedList = new LinkedList<>();
public LimitQueue(int size) {
this.limitedSize = size;
}
public void offer(E e) {
if (linkedList.size() >= limitedSize) {
linkedList.poll();
}
linkedList.offer(e);
}
public E get(int position) {
return linkedList.get(position);
}
public E getLast() {
return linkedList.getLast();
}
public E getFirst() {
return linkedList.getFirst();
}
public int getLimit() {
return limitedSize;
}
public void setLimitedSize(int size) {
this.limitedSize = size;
}
public int size() {
return linkedList.size();
}
public ArrayList getArrayList() {
ArrayList arrayList = new ArrayList<>();
for (int i = 0; i < linkedList.size(); i ++) {
arrayList.add(linkedList.get(i));
}
return arrayList;
}
@Override
public String toString() {
StringBuilder buffer = new StringBuilder();
for (int i = 0; i < linkedList.size(); i++) {
buffer.append(linkedList.get(i));
buffer.append(" ");
}
return buffer.toString();
}
}
사용 시 if(Antishake.check(view.getId()) 판단을 직접 추가하면 됩니다.잘못된 점이 있으면 귀중한 의견을 제시해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.