3

TextViewにクリックリスナーを設定すると、最初のクリックでイベントが発生しません。これがテキストビューです:

<TextView 
  style="@android:style/Widget.EditText"
  android:id="@+id/my_text_area"
  android:layout_width="0dip"
  android:layout_height="wrap_content"
  android:textColorHint="@color/text_hint"
  android:singleLine="true"
  android:focusable="true"
  android:focusableInTouchMode="true"
  android:clickable="true"
  android:padding="10dip"
  android:background="@android:color/transparent"
  android:layout_weight="1"
  ></TextView>

// OnCreate:
TextView link = (TextView)findViewById(R.id.my_text_area);
// "this" is my Activity that implements OnClickListener
link.setOnClickListener(this); 

void OnClick(view v) {
    //only gets fired after the first time
}

テキストビューをクリックすると、次のようになります。


クリック1.テキストビューがフォーカスクリックを受け取ります2.OnClickが起動されます

私もそれを発射するために1をクリックする必要があります

4

5 に答える 5

3

あなたはとても近いです...

link.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        // do something fancy
    }
});
于 2011-05-04T17:20:53.290 に答える
2

最初のクリックはフォーカスイベントによってトラップされます。onFocusもインターセプトできます。

final View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(final View view) {
            // Do something...
        }
    };
    link.setOnClickListener(listener);
    link.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(final View v, final boolean hasFocus) {
            if(hasFocus) {
                listener.onClick(v);
            }
        }
    });
于 2015-02-26T15:48:29.707 に答える
0

そのビューのフォーカスをリクエストしてみてください。

TextView link = (TextView)findViewById(R.id.my_text_area);
link.requestFocus();
link.setOnClickListener(this);
于 2011-05-04T17:21:18.830 に答える
0

onClickListenerの代わりにonTouchListenerを登録します-それはあなたが望むものを与えるはずです。

于 2011-05-04T17:24:07.793 に答える
0

今後の参考のために、最初のクリックでセレクターからフォーカス可能なTextViewの色が変更され、2回目のクリックで関連するonClick関数が起動し、1回のクリックで両方を処理するという同様の問題が発生しました。グローバルフォーカス変更リスナーを使用すると、この問題が解決しました。Android2.3でフラグメントを使用した互換性サポートv4を使用しています。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="@color/yellow" />
<item android:state_pressed="false" android:state_focused="true" android:color="@color/darkgrey" />
<item android:state_pressed="false" android:color="@color/grey" />
</selector>

Layout.xml .. ..

    <TextView
    android:id="@+id/tv1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColorHint="@color/text_hint"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:clickable="true"
    android:textColor="@drawable/textviewSelector"
    android:text="some text"/>

私のJavaファイル(フラグメント)には

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        ViewTreeObserver VTO=getView().getViewTreeObserver();
        VTO.addOnGlobalFocusChangeListener(new
        ViewTreeObserver.OnGlobalFocusChangeListener() {
            @Override
            public void onGlobalFocusChanged(View oldFocus, View newFocus) {
                switch(newFocus.getId()){
                case R.id.tv1:
                //On click Code
                break;
                }
            }
        });
}
于 2012-07-03T23:55:15.377 に答える