OnScrollListener

时间:2017-11-30 01:36:30

标签: android grid scrollview onkeylistener

真的不确定我是否理解这一点,或者说错了。我有一个gridlayout(单元格是textview)包裹在一个垂直滚动内部的水平滚动内。我正在使用Dpad在网格中导航。这很有效,当我按下右箭头键时,网格单元格按预期从左向右移动,并在按下左箭头键的同时从右向左移动。我添加了一个onKeylistener附加到网格的每个textView,当我滚动网格我正在改变颜色背景。问题是onKeyListener显然接管了网格的控制。向右滚动用于更改颜色,但单元格不再在网格上移动。一旦我到达最后一个可见列焦点继续在屏幕外,但细胞保持在屏幕外。有没有办法在onkey事件中实现滚动,以便细胞移位,我可以控制细胞的属性?或者是否有一种完全不同的方式使这项工作?

主要成分是

textViewD.setOnKeyListener(new View.OnKeyListener() {
                    @Override
                    public boolean onKey(View view, int i, KeyEvent keyEvent) {

                       if(keyEvent.getAction()==KeyEvent.ACTION_DOWN && i == KeyEvent.KEYCODE_DPAD_RIGHT) {

                           gridLayoutE.getChildAt(childIndex[0]).setBackgroundColor(Color.BLACK);
                           gridLayoutE.getChildAt(childIndex[0] + 1).setBackgroundColor(Color.GREEN);
                           childIndex[0] = childIndex[0] + 1;
                           gridLayoutE.requestFocus();


                           return true;
     }
     return false;
     }

scrolllistener,我有一个扩展horizo​​ntalscroll的类,以便让我的标题表与我的网格一起滚动。这很有效。

 @Override
public void onScrollChanged (ObservableScrollView scrollView,int x, int y, int oldx, int oldy){
    if (scrollView == hsvHeader) {
        hsvBody.scrollTo(x, y);
    } else if (scrollView == hsvBody) {

        hsvHeader.scrollTo(x, y);
    }
}

1 个答案:

答案 0 :(得分:0)

我能够通过使用dispatchKeyEvent(KeyEvent事件)找到我的问题的解决方案。我最终得到了像

这样的东西
 public boolean dispatchKeyEvent(KeyEvent event) {
     mcols= mcols + 1;
     if(event.getAction()==KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DPAD_RIGHT) {
     gridLayoutE.getFocusedChild().setBackgroundColor(Color.BLACK);
     gridLayoutE.findViewById(mcol).setBackgroundColor(Color.GREEN);
     }
        return super.dispatchKeyEvent(event);
    }

这与我的scrolllistener一起,允许我滚动网格并像我一样更改每个单元格。