gpt4 book ai didi

android - 如果我有 onTouchListener 除非滚动,否则 OnItemClickListener 不会触发?

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:25 27 4
gpt4 key购买 nike

在我的 Activity 中,我有一个 ListView ,为此我有 onItemClickListeneronTouchListener。当我单击 list.OnTouch 方法中的一行时,调用了 MotionEvent DownUp。对于这两种情况,我都返回“false”,因为我不想处理触摸事件而只想观察它。此时我预计 onItemClick 应该调用但它没有发生。但是如果我移动我的 ListView ,OnTouch 运动事件“移动”已经被调用,之后如果我点击一个项目它就会被触发。那么为什么我的 itemClick 一开始没有触发,为什么它在 ListView 中移动后触发?

代码:

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;
}
}

我的 OnItemClick 在我点击图片 onClick 事件或移动列表时激活。看起来很奇怪!!!

最佳答案

是的,它没有被调用。你能做的是

@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。

希望对你有帮助

关于android - 如果我有 onTouchListener 除非滚动,否则 OnItemClickListener 不会触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17921888/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com