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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 15
    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 confirmé

    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
    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.

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 15
    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 confirmé

    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
    Par défaut
    Bonjour,

    Est ce que tu as une erreur qui apparait ?
    Si oui pourrais tu nous montrer le logcat ?

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

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

  6. #6
    Expert confirmé

    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
    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 ....

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