Android запускает как onclick, так и onlongclick одним щелчком мыши - PullRequest
3 голосов
/ 14 октября 2011

Люди, спасибо всем за ваши мысли. Я чувствую себя довольно стыдно сейчас, проблема была не со слушателями, они посылают сообщение обработчику, который использует переключатель. Там не хватало одного простого оператора 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
  }
});

1 Ответ

0 голосов
/ 14 октября 2011

try:

convertView.setOnLongClickListener(new OnLongClickListener() { 
        @Override
        public boolean onLongClick(View v) {
            // TODO Auto-generated method stub
            return true;
        }
    });

извлечено из здесь

...