当我为TextView设置单击侦听器时,初始单击不会触发事件。这是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. textview收到焦点
单击2. OnClick被触发
我需要点击1来解雇它
答案 0 :(得分:2)
你非常接近......
link.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// do something fancy
}
});
答案 1 :(得分:1)
首先点击将是焦点事件的陷阱。您也可以简单地拦截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);
}
}
});
答案 2 :(得分:0)
尝试请求该视图的焦点。
TextView link = (TextView)findViewById(R.id.my_text_area);
link.requestFocus();
link.setOnClickListener(this);
答案 3 :(得分:0)
注册onTouchListener而不是onClickListener - 它应该为您提供所需的内容。
答案 4 :(得分:0)
对于Future Reference,我遇到了类似的问题,第一次单击会从选择器更改可聚焦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>
... 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文件(Fragment)中我有
@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;
}
}
});
}