2013-04-26 30 views
1

你好,我正在开发Android设备的应用程序。
而我试图在列表视图上实现Keylistener。
但是,如果我的列表视图有很多元素,我的Keylistener不会被应用程序调用,而是使用ListView的默认键列表。 你对这种情况有任何线索吗?
我按这种方式将keylistner绑定到我的列表视图。使用android listview和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 2013-04-26 14:58:36

+0

我不确定,但我认为当你滚动你的列表视图时,你的视图用keyListener被回收。这可能会使你的keyListener无用。 – ACengiz 2013-04-26 15:10:07

+0

但是这样做非常需要消耗品吗? – Armakorhall 2013-04-26 16:16:58