programing

클릭할 때 수신기 제거

telebox 2023. 10. 14. 10:04
반응형

클릭할 때 수신기 제거

텍스트를 순환하고 상태 메시지를 표시하는 개체가 있습니다.메시지가 변경되면 메시지와 관련된 활동으로 이동하기 위해 변경할 개체의 클릭 이벤트를 원합니다.

그래서 저는.TextView mTitleView이벤트를 이렇게 배정합니다.

public void setOnTitleClickListener(OnClickListener listener) {
    mTitleView.setOnClickListener(listener);
}

클릭 이벤트를 제거하려면 어떻게 해야 합니까?실행 가능한 영역이 없는 상태 메시지가 있어서 클릭 이벤트를 끄고 싶습니다.클릭 이벤트를 순환해서 적절히 처리할 수 있으면 좋겠는데, 최선의 방법을 모르겠어요.

mTitleView.setOnClickListener(null)속임수를 써야 합니다.

OnClickListener에서 상태를 확인한 다음 클릭이 수신기 추가 및 지우기를 수행해야 하는지 여부를 결정하는 것이 더 나은 설계일 수 있습니다.

보기를 클릭할 수 없는 경우(예: 텍스트 보기), 설정setOnClickListener(null)클릭 가능한 뷰를 의미합니다. 사용합니다.mMyView.setClickable(false)보기를 클릭할 수 있도록 하려면 선택해야 합니다.예를 들어, 배경에 여러 상태별로 다른 색을 표시하는 xml 그리기 가능을 사용할 경우, 보기가 여전히 클릭 가능한 경우, 사용자는 이를 클릭하면 다른 배경 색이 표시되므로 이상하게 보일 수 있습니다.

아마도setOnClickListener(null)?

세팅setOnClickListener(null)실행 시 클릭 수신기를 제거하는 것이 좋습니다.

그리고 누군가가 전화를 걸었다고 했습니다.View.hasOnClickListeners()이것이 돌아온 뒤에true, 아니, 친구.

다음은 다음과 같습니다.hasOnClickListeners()에서 따온android.view.View학급

 public boolean hasOnClickListeners() {
        ListenerInfo li = mListenerInfo;
        return (li != null && li.mOnClickListener != null);
    }

하나님 감사 합니다.확인합니다.null.

그래서 모든 것이 안전합니다.즐겨보세요 :-)

다음 확장 기능을 추가할 수 있습니다.

fun View.removeClickListener() {
  setOnClickListener(null)
  isClickable = false
}

전화를 건 사람들은 다음과 같은 일을 합니다.

val textView = findViewById(R.id.activity_text)
textView.removeClickListener()

위의 답변들은 변덕스럽고 신뢰할 수 없는 것 같습니다.간단한 상대 레이아웃에서 ImageView로 이 작업을 시도했지만 onClick 이벤트는 비활성화되지 않았습니다.

저에게 효과가 있었던 것은 setEnabled를 사용하는 것이었습니다.

ImageView v = (ImageView)findViewByID(R.id.layoutV);
v.setEnabled(false);

그런 다음 View가 다음 기능으로 활성화되어 있는지 확인할 수 있습니다.

boolean ImageView.isEnabled();

다른 옵션은 setContentDescription(String 문자열) 및 StringgetContentDescription()을 사용하여 보기의 상태를 확인하는 것입니다.

그냥 말해봐요, 저한테는 효과가 있었어요.

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();
        }

    }
}

코틀린 사용하기

view.setOnClickListener { null }
view.isClickable = false

아래와 같이 아이템을 초기화하는 것만으로도 효과가 있습니다.클릭 시, 롱클릭 시, 아이템 클릭 시, 아이템을 기준으로 롱클릭 시 제거됩니다.

mTitleView = findViewById(R.id .m제목 보기);

언급URL : https://stackoverflow.com/questions/5195321/remove-an-onclick-listener

반응형