【发布时间】:2011-10-13 20:31:12
【问题描述】:
人们感谢大家的想法。我现在感到很惭愧,问题出在听众身上,他们向使用开关的处理程序发送消息。那里缺少一个简单的 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;
}
好吧,我尝试通过导入 View.on... 来删除它,但没有成功。现在我尝试了 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
}
});
【问题讨论】:
-
你怎么知道两人都被解雇了?
-
您可以发布您的处理程序的代码吗?也许你错过了休息;当调用 switch(msg.what){ case LAUNCH_QUICK_TRIP: } ?
标签: android onclick onlongclicklistener