2016-04-24 67 views
0

我正在尝试为电视制作应用程序。该应用程序有两个listViews,然后在下面的一些textViews。 listViews每个大约有5个项目。当应用程序启动时,用户应该能够使用LEFT和RIGHT方向按钮在listViews之间切换,并使用UP和DOWN按钮在listViews上的项目之间导航。 DPAD_CENTER应该启动listView项目点击。DPAD导航与ListView的差异

问题在于UP和DOWN键无法正常工作。 LEFT和RIGHT会做一些事情(我按下按钮时写了一些调试代码在TextView中显示测试消息),但UP和DOWN只会在第5次按下时才执行。事实上,它是每隔五次按下和listView有5个项目向我建议,前4台印刷机通过listViews项目(这将是很好)进行交互,但如果我检查listView.getSelectedItemPosition它总是返回0.

任何想法出了什么问题。

CODE(缩短我已删除了与异步任务下载数据,并填充列表视图,但我可以补充一点,如果你认为这将有助于创建一个自定义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

解决了它。

由于系统捕获向上和向下按键,我需要使用dispatchKeyEvent()而不是onKeyDown()