2013-09-20 3 views
24

У меня есть одна кнопка с именем CheckIn. Посмотрите на мой код.Выполните как обычный щелчок, так и длинный щелчок на кнопке

checkIn.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

     Toast.makeText(HomeSafeActivity.this, "Normal Press", Toast.LENGTH_LONG).show(); 

    }); 


    checkIn.setOnLongClickListener(new View.OnLongClickListener() { 

     @Override 
     public boolean onLongClick(View v) { 

      Toast.makeText(HomeSafeActivity.this, "Long press", Toast.LENGTH_LONG).show(); 



      return false; 
     } 
    }); 

Теперь, когда я нормально нажмите кнопку сообщение отображается как Normal press.When я Длительное нажатие кнопки сообщение показывает, как длительное нажатие, а также Normal нажмите обе. Что я хочу, когда я долгое время нажимаю кнопку, только длительное событие прессования должно вызывать не нормальное событие прессования. Как я могу это достичь?

+0

Отключить onClickListener() внутри onLongClickListener(). Это может быть один из вариантов. Я не уверен, что это работает, просто уволили идеи :) – ClaireG

+0

Я думаю, что @ClaireG прав. Попробуйте это решение. –

+0

Поместите флаг как в функции 'onClick', так и' onLongClick', чтобы взаимно исключить друг друга (через оператор 'if'). Вы не можете удалить одно из двух событий, если у вас есть оба слушателя. – g00dy

ответ

37

Я получил решение моей Question.Return истинное вместо false.Just см ниже: -

checkIn.setOnLongClickListener(new View.OnLongClickListener() { 

     @Override 
     public boolean onLongClick(View v) { 

      Toast.makeText(HomeSafeActivity.this, "Long preess", Toast.LENGTH_LONG).show(); 

      return true; 
     } 
    }); 
+1

За 10 секунд до меня :) – gunar

+0

@ClaireG Спасибо! –

+1

превосходный bro! вы мужчина –

9

onLongClick() - Это возвращает логическое значение, указывающее, использовало ли вы событие, и его нельзя переносить дальше. То есть return true, чтобы указать, что вы обработали событие, и он должен остановиться здесь; return false, если вы его не обработали, и/или событие должно продолжаться до любого другого on-click listeners.

+0

Это хорошая идея; однако, что, если бы вместо «Тоста» было что-то другое? – ClaireG

+0

Не работает .... Оба регистратора запускаются при длительном нажатии кнопки –

+0

На самом деле, я просто определяю Toast в своей деятельности в качестве примера. Я использую startActivity вместо Toast, и оба события запускаются. –

-1

Попробуйте это; он должен работать.

checkIn.setOnLongClickListener(new View.OnLongClickListener() { 

    @Override 
    public boolean onLongClick(View v) { 

     checkIn.setOnClickListener(null); 

     Toast.makeText(HomeSafeActivity.this, "Long press", Toast.LENGTH_LONG).show(); 

     return false; 
    } 
}); 
-3

Try андроид: OnClick = "btnPressed" вместо OnClickListener и не использовать OnLongClickListener нет проблема в моем коде тестирования

+1

Как вы можете различать длинное и короткое нажатие? – g00dy

+0

ya он запускается только при событии onclick, а кнопка goesto long click не запускается. – Venkatesh

1

Вот одно решение (это будет работать, если (когда оба срабатывают), первый длинный пресс сработал, то нормальная пресса):

int clickFlag = 0; 
checkIn.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 

    if(clickFlag != 2){ 
     Toast.makeText(HomeSafeActivity.this, "Normal Press", Toast.LENGTH_SHORT).show(); 
     clickFlag = 0; 
    } 

    }); 

    checkIn.setOnLongClickListener(new View.OnLongClickListener() { 

    @Override 
    public boolean onLongClick(View v) { 

     Toast.makeText(HomeSafeActivity.this, "Long press", Toast.LENGTH_SHORT).show(); 

     clickFlag = 2; 
     return false; 
    } 
    }); 
} 
+0

просто верните истину на длинный клик, тогда вам не нужен флаг – batsheva

3

Вы должны вернуться верно в случае длительного клика

Пример:

btnBookingMasterCab.setOnLongClickListener(new OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      if(preCheckoutInfo!=null){ 
       rlChooseCard.setVisibility(View.VISIBLE); 
      } 
      return true; 
     } 
    }); 
+0

Я уже нашел такое же решение до 2 лет .. Спасибо! –

0

общественного логический onLongClick (View v) булева возвращает истину, если она нажата так что возвращение верно;

Смежные вопросы