IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants graphiques Android Discussion :

Problème KeyListener sur Listview


Sujet :

Composants graphiques Android

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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;
    	}
     
    }

  2. #2
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    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.
    oO, comment tu sais que c'est un problème de taille, du moment que ton listener est mis en place alors c'est lui qui ai appelé, sinon cela veut dire que ta listview a été reconstruite à un moment donnée.
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    oO, comment tu sais que c'est un problème de taille, du moment que ton listener est mis en place alors c'est lui qui ai appelé, sinon cela veut dire que ta listview a été reconstruite à un moment donnée.
    Bah je sais que c'est un probleme de taille a partir du moment ou le comportement est normal quand je limites le nombre d'élément a X et que tout ce passe bien.
    Et sans la limite le listener de la listview est plus appellé.

  4. #4
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    Est ce que tu as une erreur qui apparait ?
    Si oui pourrais tu nous montrer le logcat ?
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Non il n'y a pas d'erreur.

  6. #6
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    A quoi sert ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    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;
    					}
    Après avec le peu d'informations que tu donnes c'est vraiment dur de t'aider ....
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Le bout de code en question sert a garder un index sur la list et a lancer des animations.
    (enlarge == aggrandissement d'icone / reduce == reduction d'icone)
    lors des déplacement avec appuie sur les touches UP/DOWN.

    Bon a prioris le probleme est résolu en mettant le listener sur les elements de la list et non pas sur la list en elle même.
    Car a priori dans la gestion du scroll dans une list, la list serait recyclé ce qui aurait pour effet de bord de recycler les listener.

Discussions similaires

  1. Problème sur ListView pour récupérer le texte d'un item ?
    Par spl-concept dans le forum Composants graphiques
    Réponses: 4
    Dernier message: 28/07/2014, 13h45
  2. Problème sur ListView
    Par winchester dans le forum Composants graphiques
    Réponses: 3
    Dernier message: 14/06/2013, 18h27
  3. Problème d'affichage des données sur listView
    Par af.zakaria dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 17/08/2012, 03h15
  4. [débutant]Problème de tri sur ListView : IComparer
    Par TomDuBouchon dans le forum Windows Forms
    Réponses: 5
    Dernier message: 01/09/2009, 10h36
  5. [c# 2.0] Problème performance sur "listview" type outlook
    Par 2020 dans le forum Windows Forms
    Réponses: 9
    Dernier message: 23/10/2007, 15h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo