带ListView的DPAD导航故障

时间:2016-04-24 05:53:04

标签: android listview

我正在尝试为电视制作应用。该应用程序有两个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);
    }




}    

1 个答案:

答案 0 :(得分:0)

解决了它。

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