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
}

当我单击 textview 时,会发生以下情况:

点击 1. textview 收到焦点
点击 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

对于未来参考,我有一个类似的问题,第一次单击会从选择器更改可聚焦 TextView 的颜色,第二次单击会触发我关联的 onClick 函数,我希望单击一次来处理两者。使用全局焦点更改侦听器解决了这个问题。我在带有片段的 android 2.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>

布局.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 回答
0

注册一个 onTouchListener 而不是 onClickListener - 它应该给你你想要的。

于 2011-05-04T17:24:07.793 回答