2013-04-26 2 views
1

Привет, я разрабатываю приложение для Android-устройства.
И я пытаюсь реализовать Keylistener в Listview.
Но если в моем списке есть много элементов, мой Keylistener не вызывается приложениями, а использует список ключевых слов по умолчанию для Listview. У вас есть какие-либо сведения об этой ситуации?
Я продолжаю этот путь, чтобы связать keylistner с моим списком.Использование андроидного списка с keylistener

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; 
} 

ответ

0

Вы должны установить свой keyListener соответственно своим элементам списка из вашего адаптера списка. Надеюсь это поможет.

+0

Спасибо, что это много помогает, Но я не понимаю, почему он работает, когда у меня мало элементов и почему он не работает, когда у меня есть больше элементов. – Armakorhall

+0

Я не уверен в этом, но я думаю, когда вы просматриваете свой список, ваш взгляд с помощью keyListener перерабатывается. Это может сделать бесполезным ваш keyListener. – ACengiz

+0

Но делать так, что это очень Ressource consumming? – Armakorhall

Смежные вопросы