0

私は4つの列を表示するGoogle TVアプリでアクティビティを持っています。レイアウトのトップレベルのウィジェットは、水平のLinearLayoutです。このウィジェットには、列を構成するウィジェットが含まれています。 4つの列ウィジェット(左から右へ)は、Vertical LinearLayout(ボタンを含む)、ListFragment、ListFragment、Vertical LinearLayout(TextViewsを含む)です。Google TVでListFragmentの自動スクロールを防止するにはどうすればよいですか?

データが入力されると、2つのListFragmentsは画面の視認可能な高さよりもはるかに高く、リスト上を上下に移動するために独立してスクロールすることができます。これは、ListFragmentsの不要な自動スクロールを除いて、列間のフォーカスを移動するときを除いて、すべて正常に機能します。

たとえば、2番目の列(一番左のListFragment)の上にフォーカスしていて、Dパッドを使用してフォーカスを表示画面の中央に移動し、次に右(他のListFragmentに水平方向に移動するために)最初のListFragmentのフォーカスされた項目の横にあったリ​​スト項目(2番目のListFragment内)はフォーカスを受け取りますが、同時に2番目のListFragment垂直方向に自動スクロールして、新しくフォーカスされたアイテムを表示画面の上部に押し込みます(これは悪い)。代わりに、それがどこにあったか(リストの真ん中)に残しておきたい。

2番目のListFragmentの中央から左に移動して1番目のListFragmentに戻ると同じ問題が発生します。また、第1列のボタンの1つから、第1 ListFragmentの中央に移動した場合にも発生します。

この自動スクロールの動作は、一部のアプリケーションでは望ましいかもしれませんが、実際には適切ではないため、ユーザーの混乱を招くことがあります。

答えて

1

これは、並列垂直フラグメント間のListView dパッドナビゲーションのバグのようです。タブレットで再現し、Androidの問題追跡ツールにバグを報告してください。

はまた、あなたが次の回避策を使用できます。

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     // workaround to handle keyevent dpad-right from left list to right list, to 
     // to prevent default behavior of focused item on right list snapping to top.    
     if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) { 
      if (left_list != null && right_list != null && left_list.isFocused()){ 
       right_list.setSelection(right_list_selected_index); 
       right_list.requestFocus(); 
       return true; 
      } 
     } 
     return super.onKeyDown(keyCode, event); 
    } 
+0

おかげでメガを、あなたの回避策は実行可能なソリューションです。少数のオートスクロールが行われていますが、ユーザーを混乱させるほどのものではありません。私はdパッドを備えた物理的なタブレットを持っていませんが、さまざまなAVDでテストしましたが、問題は3.2にありますが4.0.3では修正されています。バグレポートを作成しましたhttps://code.google.com/p/android/issues/detail?id=30863 – fishingwiththesleepers

+0

物理タブレットを持っている場合は、矢印キー付きのBluetoothキーボードを使用してD-Padをシミュレートします。 –

関連する問題