2017-11-30 6 views
0

私がこれを理解しているのか、それとも間違っているのかわかりません。私はグリッドレイアウト(セルはテキストビュー)を垂直スクロールの内側にある水平スクロールの中にラップしています。私はDpadを使ってグリッドを移動しています。これはうまくいきます。右矢印パッドを押すとグリッドセルが左から右に移動し、左矢印パッドが押されると右から左に移動します。グリッドの各textViewにonKeylistenerを追加しました。グリッドをスクロールして色の背景を変更しています。問題は、明らかにonKeyListenerがグリッドのコントロールを引き継ぐことです。スクロール権は色を変更するために機能しますが、セルはグリッド上を移動しません。最後に目に見えるようになると、列のフォーカスは画面から消えませんが、セルは画面から離れたままになります。 onkeyイベント内でスクロールを実装して、セルが移動し、セルのプロパティを制御できるようにする方法はありますか?あるいは、この仕事をする全く異なる方法がありますか?onKeyListener with onScrollListener

主成分

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

答えて

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と一緒に私がしたようにグリッドをスクロールして各セルを変更することができました。

関連する問題