Problème KeyListener sur Listview
Bonjour,
Je rencontre un problème actuellement.
J'ai un KeyListener attaché a ma Listview, Mais celui ci n'est pas pris en compte si le nombre d'élément contenu dans la ListView est trop important et alors c'est le comportement par default de la ListView qui est pris en compte.
Auriez vous une idée de la raison d'un tel comportement?
Voici le code du fragment concerné particulierement la partie CreateView
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
| @Override
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()
{
// super.onKey(View v, int keyCode, KeyEvent event);
@Override
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if (event.getAction() == KeyEvent.ACTION_DOWN)
{
switch (keyCode)
{
/*case 61 :
getZappingBannerFragment().loadChannelInfo(fillMaps.get(
ListId).get("id"), false);
getZappingBannerFragment().justShow();
return true;*/
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;
} |
Et voici l'adaptater de la ListView en question:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| public class AdapterChannelList extends BaseAdapter
{
private Context mContext = null;
private List<Item> mLiveTV = null;
private int mResourceItem = R.layout.tv_element_channel_list;
public AdapterChannelList(Context context, List<Item> data)
{
mContext = context;
mLiveTV = data;
}
@Override
public int getCount()
{
// return (mLiveTV == null) ? 0 :7;
return (mLiveTV == null) ? 0 : mLiveTV.size();
}
@Override
public Object getItem(int position)
{
return (mLiveTV == null) ? null : mLiveTV.get(position);
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
convertView = LayoutInflater.from(mContext)
.inflate(mResourceItem, null);
ImageView icon = (ImageView) convertView
.findViewById(R.id.image_channel);
TextView ChanName = ((TextView) convertView
.findViewById(R.id.text_channel));
TextView ChanRank = ((TextView) convertView
.findViewById(R.id.text_idchannel));
convertView.setLayoutParams(new AbsListView.LayoutParams(308, 38));
ChanName.setText(((LiveTV) mLiveTV.get(position)).getName());
ChanRank.setText(((LiveTV) mLiveTV.get(position)).getRank().toString());
UrlImageViewHelper.setUrlDrawable(
icon,
"http://127.0.0.1/stb/item"
+ AddressCleaner
.CleanPosterAddress(((LiveTV) mLiveTV
.get(position)).getPosterAddress()),
null, null);
return convertView;
}
} |