#android
#Android
Вопрос:
У меня есть CustomAutoCompleteTextView
, и я хочу иметь возможность вызывать showDropDown();
, когда пользователь double-tap
на нем.
Как следует из названия, implements GestureDetector.OnDoubleTapListener
звучит как хорошее решение, но после добавления обязательных методов в мой пользовательский вид я понятия не имею, как все это настроить
Это методы для реализации:
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
return false;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
return false;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
return false;
}
Я хочу заархивировать что-то вроде этого:
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
showDropDown();//AutoCompleteTextView's this line is enough but the event is never triggered
return super.doYourThing();
}
Ответ №1:
Я нашел лучший способ, чем implements GestureDetector.OnDoubleTapListener
архивировать это, обратите внимание, что это решение предназначено для реализации двойного нажатия внутри пользовательского представления и всех его экземпляров
boolean firstTouch = false;
long time;
@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getAction() == event.ACTION_DOWN){
if(firstTouch amp;amp; (System.currentTimeMillis() - time) <= 300) {
firstTouch = false;
showDropDown();//In my case I want to showDropDown() change this line for whatever you want to do
} else {
firstTouch = true;
time = System.currentTimeMillis();
return super.onTouchEvent(event);
//return false;Use this if you dont want to call default onTouchEvent()
}
}
return super.onTouchEvent(event);
//return false;Use this if you dont want to call default onTouchEvent()
}
Ответ №2:
1) создайте новый GestureDetector()
detector = new GestureDetector(this,new OnGestureListener() {
@Override
public boolean onDoubleTap(MotionEvent e) {
showDropDown()
return true;
}
2) Добавьте свой CustomAutoCompleteTextView
OnTouchListener
txt.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
detector.onTouchEvent(event);
return false;
}
});
Комментарии:
1. Как это все еще не срабатывает
2. Я думаю, да, но я могу только догадываться, поскольку вы не делитесь обрезанным кодом, который показывает, где и как вы добавляете / создаете свой TextView
3. Я уверен, что это сработает, но у меня есть проблема, извините, что не указал, у меня есть несколько пользовательских AutoCompleteTextView, и я хочу, чтобы все они делали то же самое, так что этот способ потребует много работы. Я хочу реализовать функцию двойного нажатия в пользовательском классе, которая расширяет AutoCompleteTextView. И я только что нашел способ! Совместное использование за минуту. Спасибо за ваше время, приятель!
Ответ №3:
Это то, что хорошо сработало для меня:
tapDetector = новый GestureDetector(контекст, новый GestureDetector.SimpleOnGestureListener());
tapDetector.setOnDoubleTapListener(new GestureDetector.OnDoubleTapListener() {
@Override
public boolean onSingleTapConfirmed(MotionEvent e){
//Notified when a single-tap occurs.
Log.w("Debug","Single tap event occurred in view with ID: " getId());
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
Log.w("Debug","Double tap event occurred in view with ID: " getId());
return true;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
//Notified when an event within a double-tap gesture occurs, including the down, move, and up events.
return true;
}
});
Как упоминалось в предыдущем решении:
txt.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
tapDetector.onTouchEvent(event);
return false;
}
});