我正在尝试实现一个 GridView,它聚焦下一个项目和“列表末尾的过度滚动。
例如
1 2 3
4 5 6
7 8 9
我想滚动 1 > 2 > 3 > 4 > 5 > 6 > ...只需按右键。现在我只能滚动 1 > 2 > 3 然后它停止,我必须用向下键滚动。
我已经尝试在代码中设置 focusViews(在getView()
我的 ArrayList 适配器的方法中,它填充了 GridView)
view.setId(position);
view.setNextFocusLeftId(position-1);
view.setNextFocusRightId(position+1);
但这不起作用。我在grepcodeboolean *Scroll(int direction)
上找到了方法
但是这些是本地包,我无法覆盖它们。有关如何解决此问题的任何建议。我可以使用另一个视图并获得与 Gridview 相同的布局吗?
我还设置了一个OnFocusChangeListener
看看没有反应会发生什么。
编辑:
我刚刚将它添加到我的MainActivity
中,但现在它似乎onKeyDown
只在 GridView 不处理 KeyEvent 时才被调用(如果选择了一行中的最后一个项目)。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_LEFT:
if (focusedView > 0) {
mContainer.setSelection(--focusedView);
Log.v("TEST", focusedView+"");
}
return true;
case KeyEvent.KEYCODE_DPAD_RIGHT:
if (focusedView < mAdapter.getCount() - 1) {
mContainer.setSelection(++focusedView);
Log.v("TEST", focusedView+"");
}
return true;
}
return super.onKeyDown(keyCode, event);
}
编辑2:这真是太愚蠢了,但工作得非常好:D
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_DPAD_LEFT:
mContainer.onKeyDown(KeyEvent.KEYCODE_DPAD_UP, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_UP));
mContainer.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_RIGHT));
mContainer.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_RIGHT));
return true;
case KeyEvent.KEYCODE_DPAD_RIGHT:
mContainer.onKeyDown(KeyEvent.KEYCODE_DPAD_DOWN, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_DOWN));
mContainer.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_LEFT));
mContainer.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DPAD_LEFT));
return true;
}
return super.onKeyDown(keyCode, event);
}
我真的不想将此作为答案发布,我真的不想使用此代码,因为这是一个愚蠢的解决方法
; TLDR:仍然需要帮助