2010-10-30 5 views
0

J'écris une préférence personnalisée avec une barre de recherche, jusqu'ici cela fonctionne, excepté pour un problème l'ID de ma barre de recherche est défini en XML, ainsi quand j'essaye d'employer 2 de mes préfernces personnalisées et puis je mets à jour la recherche Bar je ne peux pas distinguer entre les deux.Générer un ID de ressource lors de l'exécution?

SeekBar bar = (SeekBar)view.findViewById(R.id.PreferenceSeekBar); 

Existe-t-il un moyen de générer un ID de ressource personnalisé lors de l'exécution? Ou peut-être une autre façon de résoudre ce problème?

Merci, Jason

+1

Qu'est-ce que 'view' dans votre liste de codes? – CommonsWare

+0

@CommonsWare: dans la méthode de préférences personnalisées onBind ovverriden, vous obtenez une vue Affichage, qui contient toutes les vues de l'activité de préférence en cours. – Jason

Répondre

1

sur la méthode ovverriden onBind de préférence personnalisée, vous sont transmises une vue View, qui contient toutes les vues sur l'activité de préférence actuelle.

Il n'y a pas de méthode onBind() sur Preference. Il est une méthode onBindView(). Toutefois, le View passé à onBindView() est ViewView que vous avez renvoyé à partir de onCreateView(), ou le View gonflé à partir de votre fichier de disposition spécifié si vous avez effectué cette route. Ce n'est pas toute l'activité.

Assurez-vous que vous appelez findViewById() sur le widget qui a été créé pour votre Preference, pas quelque chose avec une portée plus large. En outre, gardez à l'esprit que PreferenceActivity est un ListActivity Si votre Preference personnalisé défile de l'écran, son View peut être remis à une autre instance de votre Preference personnalisé pour recyclage.

+0

Oui, je sais même en considérant que l'effet que j'obtiens est que les deux barres de recherche bougent quand je n'en bouge qu'une seule. Ce qui n'a pas de sens étant donné que la vue qui m'est transmise ne contient pas les deux barres de recherche – Jason

+0

@Jason: Ce problème semble très familier, bien que je ne me souvienne pas de la solution. – CommonsWare

+0

honte, ça fait un moment que je suis en train de craquer, si je crée une copie de la classe prefernce personnalisée et que j'utilise ça - ça résout, en suggérant une référence mixte mais je n'en trouve pas. – Jason

1

Pour les avantages sociaux futurs arrivants:

Tag vue avec setTag() et font référence Baack avec findViewWithTag();

source: Inflate a TableRow

Questions connexes