2

こんにちは、Android デバイス用のアプリを開発しています。
そして、リストビューにキーリスナーを実装しようとしています。
ただし、リストビューに多くの要素がある場合、キーリスナーはアプリによって呼び出されず、代わりにリストビューのデフォルトのキーリストナーを使用します。この状況について何か手がかりはありますか?
この方法でキーリストナーをリストビューにバインドします。

public View onCreateView(LayoutInflater inflater, ViewGroup container,
         Bundle savedInstanceState)
{
View v = inflater.inflate(R.layout.tv_fragment_channel_list, container);
adapter = new AdapterChannelList(getActivity(), ( (List<Category>) User.getInstance().getTV() ).get(0).getContent());
list = (ListView) v.findViewById(R.id.channelListview);
list.setAdapter(adapter);
list.setOnKeyListener(new OnKeyListener()
{
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event)
    {
    if (event.getAction() == KeyEvent.ACTION_DOWN)
        {
        switch (keyCode)
            {
            case KeyEvent.KEYCODE_DPAD_CENTER:
            case KeyEvent.KEYCODE_ENTER:
            {
                ((MainActivity) getActivity()).loadVideo(mLiveTv.get(
                                         ListId).getUrl(),"TV");
                getZappingBannerFragment().loadChannelInfo(mLiveTv.get(
                                           ListId).getId(), true);
                ((MainActivity) getActivity()).findViewById(R.id.tvpannel).setVisibility(View.INVISIBLE);
                MainActivity.shouldfocus = R.id.videoView1;
                return true;
            }
            case KeyEvent.KEYCODE_DPAD_DOWN:
            {
                if (ListId >= /*6*/mLiveTv.size() -1)
                return true;
                if (ListPos == 10)
                {
                    reduce(ListPos);
                }
                else if (ListId > 10)
                reduce(ListPos);
                else
                reduce(ListId);

                ListId++;
                ListPos++;
                if (ListPos == 10)
                {
                    reduce(ListPos - 1);
                    enlarge(ListPos);
                    list.setSelectionFromTop(ListId, 0);
                    ListPos = 0;
                }
                else if (ListId > 10)
                enlarge(ListPos);
                else
                enlarge(ListId);
                //list.setSelectionFromTop(ListId, 0);
                //list.scrollBy(0, 250);
                return true;
            }
            case KeyEvent.KEYCODE_DPAD_UP:
            {
                // list.scrollBy(0, -250);
                if (ListId > 0)
                {
                    reduce(ListId);
                    ListId--;
                    ListPos--;
                }
                if (ListPos < 0)
                {
                    enlarge(ListId);
                    list.setSelectionFromTop(ListPos, 0);
                    ListPos = 0;
                }
                else
                {
                    enlarge(ListId);
                }
                //list.setSelectionFromTop(ListId, 0);
                //list.setSelection(ListId);

                return true;
            }
            case KeyEvent.KEYCODE_BACK:
            {
                //getZappingBannerFragment().justShow();
                ((MainActivity) getActivity()).findViewById(R.id.tvpannel).setVisibility(View.INVISIBLE);
                ((MainActivity) getActivity()).findViewById(R.id.menu_principal).setVisibility(View.VISIBLE);
                MainActivity.shouldfocus = R.id.menu_principal;
                return true;
            }
            }
        }
    return true;
    }
});
return v;
}
4

1 に答える 1

0

リスト アダプタのリスト行項目にそれぞれ keyListener を設定する必要があります。お役に立てれば。

于 2013-04-26T14:37:34.023 に答える