人们感谢大家的想法。我现在感到非常惭愧,问题是听众的问题,他们向使用开关的处理程序发送消息。一个简单的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
}
});
答案 0 :(得分:0)
尝试:
convertView.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
return true;
}
});
摘自here