在我的活动中,我有一个列表视图,为此我同时拥有onItemClickListener
和onTouchListener
。当我在我的list.OnTouch
方法中单击一行时,调用MotionEvent
Down
and Up
。对于这两种情况,我都返回“false”,因为我不想处理触摸事件而只想观察它。在这一刻,我希望onItemClick
应该打电话,但它没有发生。但是如果我移动我的列表视图,OnTouch
就会调用运动事件“move”,然后如果我点击一个项目,它就会被触发。那么为什么我itemClick
最初没有触发以及为什么它在列表视图中移动后触发?
代码 :
public class MainActivity extends Activity {
Handler rHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView lv = (ListView) this.findViewById(R.id.mylist);
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
System.out.println("An Item is clicked not touched");
}
});
rHandler = new Handler(this,lv);
}
}
我在适配器中填充自定义 ListView lv,该列表行包含 textViews 和 imageViews。此外,我在 imageViews 上有一些 onclick 事件。所以,我尝试在 imageView 中将 android:focusable 和 android:focusableInTouchMode 设置为 false。但没有成功。
在 Handler.java 中
public class Handler implements View.OnTouchListener {
public Handler(Context mContext,ListView lv) {
lv.setOnTouchListener(this);
}
@Override
public final boolean onTouch(View view, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE: {
System.out.println(" Motion ... ");
break;
}
case MotionEvent.ACTION_DOWN: {
System.out.println(" Motion Down ");
break;
}
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP: {
System.out.println(" Motion Up ");
break;
}
}
System.out.println("I am returning false");
return false;
}
}
一旦我单击图像 onClick 事件或移动我的列表,我的 OnItemClick 就会激活。看起来很奇怪!!!