【问题标题】:How to enable scrolling on a simpleadapter on Google Glass's firmware X16如何在 Google Glass 固件 X16 上的简单适配器上启用滚动
【发布时间】:2014-04-16 01:45:59
【问题描述】:

将我的 Google Glass 更新到 XE16 后,我使用 simpleadapter 构建的列表视图无法再滚动。有没有办法使用 GDK 手动启用滚动或修复此问题?

【问题讨论】:

标签: android scroll google-glass simpleadapter gdk


【解决方案1】:

随着 X16 更新,我的列表视图也停止滚动。您可以通过执行以下操作来构建回滚:

在您的活动的onCreate 方法中,请务必:

  1. 设置列表的选择模式
  2. 将列表的可点击属性设置为 true。
  3. 设置列表的onItemClick监听器
  4. 创建手势检测器(见下文)

例如:

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_LEFTSWIPE_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;
}

希望这会有所帮助!

【讨论】:

  • 非常感谢您的帮助,现在可以使用了。一样东西;我还需要添加这些导入“import com.google.android.glass.touchpad.Gesture; import com.google.android.glass.touchpad.GestureDetector;”。
  • 这个问题似乎也会影响 AlertDialogs - code.google.com/p/google-glass-api/issues/detail?id=326#c2
  • (在此处复制以便通知所有回答的人)我在此处提交了有关 XE16 和 16.1 上的 ListView 滚动损坏的问题 - code.google.com/p/google-glass-api/issues/detail ?id=484
  • 正如我在stackoverflow.com/a/23164323/937715 中指出的那样,要使其与 ListActivity 一起使用,您需要覆盖 onGenericMotionEvent(MotionEvent event) 并将它们传递给 GestureDetector,如 stackoverflow.com/q/23160084/937715 所示。
  • 仅供参考 - 我在 G+ 上的 Glass Dev Community 中发布了一个关于垂直列表推荐做法的问题 - plus.google.com/104230720789224785692/posts/cpzD4xjjJbo
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 1970-01-01
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多