После обновления моих Google Glass до XE16 мой список, который я создал с помощью простого адаптера, больше не может прокручиваться. Есть ли способ вручную включить прокрутку с помощью GDK или исправить эту проблему?
Как включить прокрутку на простом адаптере на прошивке Google Glass X16
Ответы (1)
Мой список также перестал прокручиваться с обновлением X16. Вы можете создать прокрутку назад, выполнив следующие действия:
В методе onCreate
вашей активности обязательно:
- установить режим выбора списка
- установите для свойства clickable списка значение true.
- установить
onItemClick
слушателя списка - создать детектор жестов (см. ниже)
Например:
myListView = (ListView)findViewById(R.id.MY_LIST_VIEW);
if(myListView != null){
myListView.setAdapter(mAdapter);
myListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
myListView.setClickable(true);
myListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id){
Log.d("MY_LOG", "click at position " + position);
}
});
}
mGestureDetector = createGestureDetector(this);
Теперь нам нужно написать новый метод для вызова createGestureDetector()
выше (последняя строка). По сути, вы можете изменить код, указанный в документах GDK, для прокрутки вверх и вниз на основе жестов SWIPE_LEFT
и SWIPE_RIGHT
. Обратите внимание, что в приведенном выше коде я присвоил свой listView переменной с именем myListView
. Вот пример метода для детектора жестов, который будет прокручиваться на основе жестов смахивания:
private GestureDetector createGestureDetector(Context context) {
GestureDetector gestureDetector = new GestureDetector(context);
//Create a base listener for generic gestures
gestureDetector.setBaseListener( new GestureDetector.BaseListener() {
@Override
public boolean onGesture(Gesture gesture) {
if (gesture == Gesture.TAP) { // On Tap, generate a new number
return true;
} else if (gesture == Gesture.TWO_TAP) {
// do something on two finger tap
return true;
} else if (gesture == Gesture.SWIPE_RIGHT) {
// do something on right (forward) swipe
myListView.setSelection(myListView.getSelectedItemPosition()+1);
return true;
} else if (gesture == Gesture.SWIPE_LEFT) {
// do something on left (backwards) swipe
myListView.setSelection(myListView.getSelectedItemPosition()-1);
return true;
}
return false;
}
});
gestureDetector.setFingerListener(new GestureDetector.FingerListener() {
@Override
public void onFingerCountChanged(int previousCount, int currentCount) {
// do something on finger count changes
}
});
gestureDetector.setScrollListener(new GestureDetector.ScrollListener() {
@Override
public boolean onScroll(float displacement, float delta, float velocity) {
// do something on scrolling
return false;
}
});
return gestureDetector;
}
Надеюсь это поможет!
person
adamup
schedule
18.04.2014
Круто! Большое спасибо за помощь, теперь все работает. Одна вещь; Мне также нужно было добавить эти импорты import com.google.android.glass.touchpad.Gesture; импортировать com.google.android.glass.touchpad.GestureDetector;.
- person BarryK88; 19.04.2014
Ух ты! Есть идеи, почему это изменилось в XE16? У меня есть то, что похоже на ту же проблему в PreferenceFragment, который, как я полагаю, содержит ListView. stackoverflow.com/questions/23160084/ К сожалению, я не знаю, как получить дескриптор ListView в PreferenceFragment или программно получить/установить его позицию прокрутки с помощью GestureDetector.
- person swooby; 19.04.2014
Пока без понятия. Я копал, но не понял, что изменилось. Дайте мне знать, если вы что-нибудь обнаружите.
- person adamup; 19.04.2014
Похоже, что эта проблема также затрагивает AlertDialogs — код. google.com/p/google-glass-api/issues/detail?id=326#c2
- person Sean Barbeau; 22.04.2014
(Копирование здесь, чтобы все ответившие были уведомлены) Я подал заявку на неработающую прокрутку ListView на XE16 и 16.1 здесь - code.google.com/p/google-glass-api/issues/detail?id=484
- person Sean Barbeau; 23.04.2014
Как я отметил в stackoverflow.com/a/23164323/937715, чтобы это работало с ListActivity, вам необходимо переопределить onGenericMotionEvent (событие MotionEvent) и передайте их GestureDetector, как показано на stackoverflow.com/q/23160084/937715.
- person Sean Barbeau; 23.04.2014
к сведению: я разместил вопрос о рекомендуемых методах работы с вертикальными списками в сообществе разработчиков Glass на G+ – plus. google.com/104230720789224785692/posts/cpzD4xjjJbo
- person Sean Barbeau; 24.04.2014
@adamup что, если меньше элементов (например, два элемента), которые не активируют прокрутку? Как получить
setOnItemClickListener
? Я попробовал код, но setOnItemClickListener
не работает? Любое улучшение по этому поводу?
- person hrskrs; 26.05.2015
ListView
в XE16 и 16.1 здесь - code.google.com/p/google-glass-api/issues/detail?id=484 - person Sean Barbeau   schedule 22.04.2014