人们感谢你们的想法。我现在感到很惭愧,问题是听众没有,他们向使用开关的处理程序发送消息。其中缺少一个简单的break语句,导致程序的行为与原来一样。再次感谢你的时间。
我正在制作一个适配器类,它存储通过火车的快速旅行的可能性。这是在列表中实现的。列表包含一个删除按钮。如果按下该键,则从列表中删除。如果触摸到其他东西,它应该打开另一个窗口,但如果长按它应该打开一个对话框来编辑当前设置。
问题是,在短单击时,短单击侦听器和长单击侦听器都会触发。如果我长按,只会发出长按。
有人有什么建议/建议/答案吗?代码是:
public View getView(int position, View convertView, ViewGroup viewGroup) {
QuickTrips entry = quickTripList.get(position);
if(convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.quick_trip_list, null);
}
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(handler != null) {
QuickTrips entry = (QuickTrips) v.getTag();
Message msg = Message.obtain();
msg.what = LAUNCH_QUICK_TRIP;
msg.obj = entry;
handler.sendMessage(msg);
}
}
});
convertView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
QuickTrips entry = (QuickTrips) v.getTag();
Message msg = Message.obtain();
msg.what = EDIT_QUICK_TRIP;
msg.obj = entry;
handler.sendMessage(msg);
return true;
}
});
convertView.setTag(entry);
TextView text = (TextView) convertView.findViewById(R.id.text);
text.setText(entry.getFromTo());
Button remove = (Button) convertView.findViewById(R.id.remove);
remove.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
QuickTrips entry = (QuickTrips) v.getTag();
quickTripList.remove(entry);
notifyDataSetChanged();
}
});
remove.setTag(entry);
return convertView;
}
好吧,我试着移除了视图。在…但没有成功。现在我试着用OntouchListener…问题是它只在事件上被调用。开始使用计时器比应该做的要多,不是吗?我只是不明白为什么长按一下就被短按一下
OntouchEvent中的代码:
convertView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
long downTime = event.getDownTime();
long pressedTime = event.getEventTime();
if(DEBUG) Log.i("qt", downTime + " en " + pressedTime);
if(event.getAction() == MotionEvent.ACTION_DOWN) {
if(DEBUG) Log.i("qt", "key down");
}
else if(event.getAction() == MotionEvent.ACTION_UP) {
if(DEBUG) Log.i("qt", "key up");
return true;
}
else {
if(DEBUG) Log.i("qt", "else"); //never called
}
return true; //if false then action up isn't called
}
});
最佳答案
尝试:
convertView.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
return true;
}
});
摘自here
关于android - Android会在短按时触发onclick和onlongclick,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7760087/