2013-04-26 31 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