2016-04-24 12 views
0

私はTV用のアプリを作ろうとしています。このアプリケーションには2つのlistViewがあり、次にいくつかのtextViewがあります。 listViewsにはそれぞれ約5個のアイテムが設定されています。アプリケーションが起動すると、ユーザーはLEFTとRIGHTの方向ボタンを使用してlistViewsを切り替えることができ、UPおよびDOWNボタンを使用してlistViewの項目間を移動できます。 DPAD_CENTERはlistView項目のクリックを開始する必要があります。DPADナビゲーションがグリッチありListView

問題は、UPキーとDOWNキーが正しく機能していないことです。 LEFTとRIGHTは何かを行います(ボタンを押したときにTextViewにテストメッセージを表示するためのデバッグコードを書きました)が、UPとDOWNは5回ごとに実行されます。 5回目のプレスでlistViewが5つの項目を持っているという事実は、最初の4つのプレスがlistViews項目を操作していることを示唆していますが、listView.getSelectedItemPositionをチェックすると常に0が返されます。

どんなアイデアが間違っているのか。

CODE(私はデータをダウンロードして、リストビューを移入するASYNCタスクでカスタムAdapaterを作成しますが、私はあなたが思うならば、それは助けになることを追加することができますセクションを削除したコードを短くするために)

import android.app.Activity; 
import android.content.res.AssetManager; 
import android.graphics.Typeface; 
import android.os.Bundle; 
import android.view.KeyEvent; 
import android.widget.ListView; 
import android.widget.RelativeLayout; 
import android.widget.TextClock; 
import android.widget.TextView; 


public class MainActivity extends Activity 
{ 
    private ListView listOne; 
    private ListView listTwo; 
    private TextClock clock; 

    RssListViewAdapter adapterOne; 
    RssListViewAdapter adapterTwo; 


    private TextView focusView; 
    private TextView listItem; 
    private RelativeLayout master; 

    private int position; 
    private int leftorright; 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.rss_layout); 

     //STUFF THAT CALLS CUSTOM ADAPATER WITH ASYNC TASK TO LOAD CONTENT INTO 
     //LISTVIEWS 

     focusView = (TextView) findViewById(R.id.focusMove); 
     listItem = (TextView) findViewById(R.id.textView2); 

     listOne.setFocusable(true); 
     listOne.setFocusableInTouchMode(true); 
     listOne.requestFocus(); 

    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event){ 
     boolean handled = false; 

     switch (keyCode){ 
      case KeyEvent.KEYCODE_DPAD_RIGHT: 
       listItem.setText(Integer.toString(listOne.getSelectedItemPosition())); 
       break; 
      case KeyEvent.KEYCODE_DPAD_LEFT: 
       //listOne.setSelection(position); 
       int i = listOne.getSelectedItemPosition(); 
       listOne.getAdapter().getView(i, null, null).performClick(); 
       break; 
      case KeyEvent.KEYCODE_DPAD_UP: 
       listItem.setText("UP"); 
       break; 
      case KeyEvent.KEYCODE_DPAD_DOWN: 
       listItem.setText("DOWN"); 
       break; 

     } 
     return super.onKeyDown(keyCode, event); 
    } 




}  

答えて

0

解決しました。

システムがUPとDOWNのキーを押しているので、onKeyDown()ではなくdispatchKeyEvent()を使用する必要がありました。

関連する問題