Bien que je sache qu'il n'est pas possible pour moi de faire référence à une variable non-finale dans ma méthode onClick, je suis curieux de savoir comment je résous le problème auquel je suis actuellement confronté."Impossible de se référer à une variable non-finale dans la classe interne" Comment est-ce que je manipule un TextView en fonction de l'état d'une case à cocher?
J'ai un ArrayAdapter. Si un utilisateur appuie sur la case à cocher une asyncTask et que l'utilisateur s'abonne ou se désinscrit dans une file d'attente, selon que la case est cochée ou non.
Je souhaite que cet état apparaisse dans chaque élément du texte de mon TextView txtStatus. Comment définir le texte d'un TextView en fonction du statut d'une case à cocher?
Voici une partie du code de ma méthode de getView:
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View row = convertView;
final CheckBox queueCBox;
userControl = new UserController(context);
final String queueName = data[position].label;
if(row == null)
{
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
final QueueHolder holder = new QueueHolder();
holder.queuecbox = (CheckBox)row.findViewById(R.id.queues_item_checkbox);
queueCBox = (CheckBox)row.findViewById(R.id.queues_item_checkbox);
holder.txtLabel = (TextView)row.findViewById(R.id.queues_item_label);
holder.txtStatus = (TextView)row.findViewById(R.id.queues_item_status);
holder.queuecbox.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
final String[] param = new String[1];
param[0] = queueName;
if(queueCBox.isChecked())
{
holder.txtStatus.setText("Tilmeldt");
Log.d("ClickTest","SWITCH ON");
new JoinQueueTask().execute(param);
}
else
{
holder.txtStatus.setText("Frameldt");
Log.d("ClickTest","SWITCH OFF");
new LeaveQueueTask().execute(param);
}
}
});
row.setTag(holder);
}
else
{
final QueueHolder holder = (QueueHolder)row.getTag();
}
QueueItem queue = data[position];
String name = queue.label.replace("-", " ");
holder.txtLabel.setText(name); // holder cannot be resolved
holder.queuecbox.setChecked(queue.value); // holder cannot be resolved
return row;
}
Si je fais ce support ne peut donc pas être résolu lorsque je tente de mettre le texte de l'étiquette et l'état de la case à cocher plus tard dans la méthode. holder.txtLabel.setText (nom); holder.queuecbox.setChecked (queue.value); – CodePrimate
Avez-vous essayé de le faire? Pour autant que je sache, dans ce cas, votre objet titulaire devient final et non les variables membres du titulaire. Je peux me tromper sur la partie 'finale'. – Shubhayu
Oui. J'ai édité mon post original avec l'ensemble getView(). Regardez les deux dernières lignes – CodePrimate