我正在尝试为电视制作应用。该应用程序有两个listViews,然后是一些textViews。 listViews每个大约包含5个项目。当应用程序启动时,用户应该能够使用LEFT和RIGHT方向按钮在listViews之间切换,并使用向上和向下按钮在listViews上的项目之间导航。 DPAD_CENTER应该启动listView项目点击。
问题是UP和DOWN键无法正常工作。 LEFT和RIGHT会做的事情(我写了一些调试代码,当按下按钮时在TextView中显示测试消息)但是UP和DOWN只会在每次按5次时执行。事实上每五次按下并且listView有5个项目向我建议前四个印刷机正在listViews项目上进行交互(这很好)但是如果我检查listView.getSelectedItemPosition它总是返回0.
任何想法出了什么问题。
CODE(为了缩短代码,我删除了创建自定义Adapater的部分,其中包含ASYNC任务以下载数据并填充列表视图但我可以添加,如果您认为它会有帮助的话)
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 :(得分:0)
解决了它。
当系统捕获向上和向下按键时,我需要使用dispatchKeyEvent()
而不是onKeyDown()
。