我需要帮助... :-) 我的ListView有一个自定义适配器。这些项目是TextViews。 我希望能够在每个TextView上处理onSingleTap,onFling和所有其他事件。 但只有onDown事件有效!其他所有人都不要!我不明白为什么。在我的其他活动中,TextViews不是ListView的一部分,一切正常......
这就是我所拥有的:
public class ListViewAdapter extends BaseAdapter{
...
private GestureDetector txtProductGD;
private View.OnTouchListener txtProductGL;
...
public ListViewAdapter(Context context, ArrayList<Product> products) {
...
txtProductGL = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
txtProductGD = new GestureDetector(new txtProductGestureDetector((TextView) v));
return txtProductGD.onTouchEvent(event);
}
};
...
}
public View getView(int position, View convertView, ViewGroup parent) {
...
view = inflater.inflate(R.layout.listview_item, null);
TextView textView = (TextView) view.findViewById(R.id.txtProduct);
textView.setOnTouchListener(txtProductGL);
...
}
private class txtProductGestureDetector extends SimpleOnGestureListener {
private TextView textView;
public txtProductGestureDetector(TextView textView) {
this.textView = textView;
}
public boolean onDown (MotionEvent e) {
textView.setText("onDown..."); // IT WORKS!
return false;
}
public boolean onSingleTapConfirmed (MotionEvent e) {
textView.setText("onSingleTapConfirmed..."); // IT DOESN'T WORK!
return false;
}
// ALL OTHER METHODS ARE ALSO DON'T WORK!..
}
}
答案 0 :(得分:0)
我不知道您是否使用自定义类txtProductGestureDetector
是出于其他原因,但如果您只想覆盖特定视图的方法,请尝试以下操作:
TextView textView = (TextView) view.findViewById(R.id.txtProduct);
textView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch(event.getAction()) {
case (MotionEvent.ACTION_DOWN) :
Log.d(DEBUG_TAG,"Action was DOWN");
return true;
case (MotionEvent.ACTION_MOVE) :
Log.d(DEBUG_TAG,"Action was MOVE");
return true;
case (MotionEvent.ACTION_UP) :
Log.d(DEBUG_TAG,"Action was UP");
return true;
case (MotionEvent.ACTION_CANCEL) :
Log.d(DEBUG_TAG,"Action was CANCEL");
return true;
default :
return true;
}
}
});
可以将其放在getView
方法中,并将touchListener指定给textView。