MISE À JOUR: J'ai décidé d'utiliser l'ExpandableListAdapter pour accomplir cela ... car ce code est presque une tentative d'ingénierie de ce que fait déjà l'adaptateur de liste extensible.Comment faire afficher correctement ListView après avoir cliqué sur onClickListener?
J'utilise le modèle standard de ViewHolder afin de faire ListView simplement travailler ...
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
ViewHolder holder;
if(convertView == null){
vi = inflater.inflate(R.layout.item, null);
holder=new ViewHolder();
holder.text=(TextView)vi.findViewById(R.id.text);
holder.image=(ImageView)vi.findViewById(R.id.image);
holder.expandButton=(ImageView)vi.findViewById(R.id.expand_button);
vi.setTag(holder);
}
else
holder=(ViewHolder)vi.getTag();
However....I believe that inside of my onClickListener...something is going wrong.
final String textData = texts[position];
final ViewHolder holderFinal = holder;
holder.expandButton.setVisibility(View.VISIBLE);
holder.expandButton.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v) {
holderFinal.expandButton.setImageResource(R.drawable.expander_ic_maximized);
holderFinal.text.setText(textData);
So, everything displays fine when scrolling back and forth....however, whenever one of the listitems is expanded, the final line above contains a textData that belongs to another row. How do I get the correct textData to work INSIDE the onCLick listener?
La clause 'else' de votre premier bloc de code devrait sûrement obtenir convertView.getTag(), pas vi.getTag(). –
il est, et maintenant plus de code est affiché. – hunterp
Vous effectuez un programme d'écoute onClick pour chaque ligne? –