在我的活动中,我有一个列表视图,因为我有onItemClickListener
和onTouchListener
。当我点击list.OnTouch
方法中的MotionEvent
Down
和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.Also我在imageViews.So上有一些onclick事件,我已经尝试了android:focusable和android:focusableInTouchMode在imageView.But中设置为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;
}
}
我的OnItemClick在我点击图片onClick事件或者我移动了我的列表后变为活动状态。看起来很奇怪!!!
答案 0 :(得分:2)
是的,它没有被调用。 你能做的是
@Override
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction())
{
case MotionEvent.ACTION_DOWN:
break;
case MotionEvent.ACTION_MOVE:
break;
case MotionEvent.ACTION_UP:
if(!mIsTouchHandeled){
int position = mChatListView.pointToPosition((int) event.getX(), (int) event.getY());
if(position!=ListView.INVALID_POSITION){
mChatListView.performItemClick(mChatListView.getChildAt(position-mChatListView.getFirstVisiblePosition()), position, mChatListView.getItemIdAtPosition(position));
}
}
break;
}
// return super.onTouchEvent(event);
return false;
}
}
基本上我发现如果没有完成触摸工作,我会通过performClick方法调用我的OnItemClick。
希望它会有所帮助
答案 1 :(得分:0)
你应该返回super.onTouchEvent(event);相反,我返回false。通过重新调整false,您告诉系统您不希望View的触摸事件,因此忽略onClickEvent。