テキストが循環してステータスメッセージを表示するオブジェクトがあります。メッセージが変更されたら、オブジェクトのクリックイベントを変更して、メッセージが関連するアクティビティに移動するようにします。
したがって、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 my friendが返されるとコメントしました。
Android.view.View
クラスから取得したhasOnClickListeners()
の実装を次に示します
public boolean hasOnClickListeners() {
ListenerInfo li = mListenerInfo;
return (li != null && li.mOnClickListener != null);
}
ああ、助かった。 null
をチェックします。
すべてが安全です。楽しい :-)
ただ置いて、それは私のために働いた
itemView.setOnClickListener(null);
上記の答えは不安定で信頼性が低いようです。シンプルな相対レイアウトのImageViewでこれを実行しようとしましたが、onClickイベントは無効になりませんでした。
私のために働いたのはsetEnabledを使用していたことです。
ImageView v = (ImageView)findViewByID(R.id.layoutV);
v.setEnabled(false);
次に、次の方法でビューが有効になっているかどうかを確認できます。
boolean ImageView.isEnabled();
別のオプションは、setContentDescription(String string)およびString getContentDescription()を使用してビューのステータスを決定することです。
/**
* Remove an onclick listener
*
* @param view
* @author [email protected]
* @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();
}
}
}
以下のようにアイテムを再初期化するだけでうまくいきます。アイテムに基づいて、onclick、onlonglick、onitemclick、onitemlongclickを削除します。
mTitleView = findViewById(R.id.mTitleView);