텍스트가 순환하고 상태 메시지를 표시하는 객체가 있습니다. 메시지가 변경되면 객체의 클릭 이벤트가 변경되어 메시지와 관련된 활동으로 이동합니다.
그래서, 나는 이것을 가지고 TextView mTitleView
이벤트를 할당하고 있습니다.
public void setOnTitleClickListener(OnClickListener listener) {
mTitleView.setOnClickListener(listener);
}
클릭 이벤트를 어떻게 제거합니까? 실행 가능한 영역이없는 일부 상태 메시지가 있으므로 클릭 이벤트를 끄고 싶습니다. 또한 이러한 클릭 이벤트를 순환하여 올바르게 처리하고 싶지만 모범 사례가 확실하지 않습니다.
답변
mTitleView.setOnClickListener(null)
트릭을해야합니다.
더 나은 디자인은 OnClickListener에서 상태를 확인한 다음 클릭 리스너를 추가하고 삭제하는 것보다 클릭이 무엇을해야하는지 여부를 결정하는 것입니다.
답변
보기를 클릭 할 수없는 경우 (예 : TextView) 설정 setOnClickListener(null)
하면보기를 클릭 할 수 있음을 의미합니다. mMyView.setClickable(false)
보기를 클릭 할 수 없게 하려면 사용하십시오 . 예를 들어, 배경에 대해 XML 드로어 블을 사용하는 경우 (상태에 따라 다른 색상이 표시됨)보기를 여전히 클릭 할 수 있으면 사용자가 클릭 할 수 있고 다른 배경색이 표시되어 이상하게 보일 수 있습니다.
답변
아마도 setOnClickListener(null)
?
답변
설정은 setOnClickListener(null)
런타임에 클릭 리스너를 제거하는 좋은 아이디어이다.
또한 누군가가 전화 댓글을 달았없는 View.hasOnClickListeners()
이 후 것은 반환 true
, NO 내 친구.
다음은 클래스 hasOnClickListeners()
에서 가져온 구현입니다.android.view.View
public boolean hasOnClickListeners() {
ListenerInfo li = mListenerInfo;
return (li != null && li.mOnClickListener != null);
}
하나님 감사합니다. 확인합니다 null
.
모든 것이 안전합니다. 즐겨 🙂
답변
위의 답변은 날고 신뢰할 수없는 것 같습니다. 간단한 상대 레이아웃의 ImageView 로이 작업을 시도했지만 onClick 이벤트를 비활성화하지 않았습니다.
나를 위해 일한 것은 setEnabled를 사용하고있었습니다.
ImageView v = (ImageView)findViewByID(R.id.layoutV);
v.setEnabled(false);
그런 다음 다음을 사용하여보기가 활성화되어 있는지 확인할 수 있습니다.
boolean ImageView.isEnabled();
또 다른 옵션은 setContentDescription (String string) 및 String getContentDescription ()을 사용하여보기의 상태를 판별하는 것입니다.
답변
그냥 넣어, 그것은 나를 위해 일했다
itemView.setOnClickListener(null);
답변
/**
* Remove an onclick listener
*
* @param view
* @author malin.myemail@gmail.com
* @website https://github.com/androidmalin
* @data 2016-05-16
*/
public static void unBingListener(View view) {
if (view != null) {
try {
if (view.hasOnClickListeners()) {
view.setOnClickListener(null);
}
if (view.getOnFocusChangeListener() != null) {
view.setOnFocusChangeListener(null);
}
if (view instanceof ViewGroup && !(view instanceof AdapterView)) {
ViewGroup viewGroup = (ViewGroup) view;
int viewGroupChildCount = viewGroup.getChildCount();
for (int i = 0; i < viewGroupChildCount; i++) {
unBingListener(viewGroup.getChildAt(i));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}