반응형
onTouchListener 경고 : 클릭이 감지되면 onTouch가 View # performClick을 호출해야합니다.
나는 onTouchListener
. 불행히도 onTouch () 메서드 throws
나에게 경고 :
com/calculator/activitys/Calculator$1#onTouch should call View#performClick when a click is detected
무엇 않습니다 그 의미? 이 경고에 대한 정보를 찾지 못했습니다. 다음은 전체 코드입니다.
LinearLayout llCalculatorContent = (LinearLayout) fragmentView.findViewById(R.id.calculator_content);
llCalculatorContent.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Tools.hideKeyboard(getActivity(), getView());
getView().clearFocus();
return false;
}
});
여기 있습니다 :
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
//some code....
break;
case MotionEvent.ACTION_UP:
v.performClick();
break;
default:
break;
}
return true;
}
Custom View
명시 적으로 재정의 하는 을 사용하지 않는 경우 onPerformClick
Secko의 대답을 따르는 것만으로 경고가 제거되지 않습니다.
그의 대답뿐만 아니라, 같은 클래스에서 같은 일을 위해 android.widget.Button
또는 Button
당신은 대상보기를 확장하는 간단한 사용자 지정보기를 확인해야합니다.
예 :
사용자 정의보기 클래스 :
public class UselessButton extends AppCompatButton {
public UselessButton(Context context) {
super(context);
}
public UselessButton(Context context, AttributeSet attrs) {
super(context, attrs);
}
public UselessButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean performClick() {
return super.performClick();
}
}
XML :
<stackoverflow.onEarth.UselessButton
android:id="@+id/left"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:background="@drawable/left"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.16"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBaseline_toBaselineOf="@+id/right"
app:layout_constraintVertical_bias="0.5" />
자바 :
left.setOnTouchListener((v, event) -> {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
enLeft = 1;
enRight = 0;
return true;
} else if (event.getAction() == MotionEvent.ACTION_UP) {
enLeft = 0;
v.performClick();
return false;
} else {
return false;
}
});
현재 문제 : 경고는 IDE에 의해 해결되지만 실제 Android 기기에서 실제로 수행되는 클릭 동작을 볼 수 없습니다.
EDIT: Fixed getting the click event : Use View.setPressed(boolean)
down.setOnTouchListener((v, event) -> {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
enFront = 0;
enBack = 1;
left.setPressed(true);
return true;
} else if (event.getAction() == MotionEvent.ACTION_UP) {
enBack = 0;
v.performClick();
v.setPressed(false);
return false;
} else {
return false;
}
You can suppress the Lint
@SuppressLint("ClickableViewAccessibility")
You should call performClick()
inside onTouchEvent()
.
@Override
public boolean onTouchEvent(MotionEvent event) {
//A logic
performClick();
return super.onTouchEvent(event);
}
or
findViewById(R.id.view1).setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
v.performClick();
return v.onTouchEvent(event);
}
});
Read more here
반응형
'developer tip' 카테고리의 다른 글
bash에서 alt + 숫자를 누르면 (arg [numeric])이 무엇입니까? (0) | 2020.09.08 |
---|---|
-[UITableView _endCellAnimationsWithContext :]에서 어설 션 실패 (0) | 2020.09.08 |
절차 적 음악 생성 기술 (0) | 2020.09.08 |
이동 전용 유형의 벡터를 나열 초기화 할 수 있습니까? (0) | 2020.09.08 |
ffmpeg를 사용하여 고품질 비디오 인코딩 (0) | 2020.09.08 |