Duplicata possible :
Android enregistre l'état de la case à cocher dans le ListView avec l'adaptateur de curseur
J'ai un ListView
où chaque élément contient un certain text(name,id)
et une case à cocher. Il y a un bouton pour revenir en arrière à partir de ListView
page. Ainsi, un utilisateur vérifie certains éléments et retourne à la page précédente. Il y a également un bouton sur cette page pour revenir à la page précédente. ListView
page. Lorsqu'il/elle revient, je veux lui montrer les éléments qu'il/elle a sélectionnés précédemment.
Je suis au courant SharedPreferences
mais je ne veux pas l'utiliser car je ne veux pas sauvegarder cet état lorsque l'utilisateur redémarre l'application. Je ne le veux que pendant l'exécution de l'application. Je fais un certain travail dessus, je sauvegarde les données qu'il a sélectionnées et je les vérifie également lorsqu'il revient. Mais je n'arrive pas à vérifier les cases à cocher. J'espère que quelqu'un pourra me dire ce que je fais de mal ici. J'utilise les cases à cocher à partir de xml, pas de manière programmatique.
public class MyCustomArrayAdapter extends ArrayAdapter<Model> {
private final List<Model> list;
private final Activity context;
public static ArrayList<String> friendName=new ArrayList<String>();
public static ArrayList<String> friendBirthdate=new ArrayList<String>();
public static ArrayList<String> friendId=new ArrayList<String>();
public static ArrayList<String> getSelectedFriendId;
public MyCustomArrayAdapter(Activity context, List<Model> list)
{
super(context, R.layout.list_layout, list);
this.context = context;
this.list = list ;
}
public static int count=0;
static class ViewHolder
{
protected TextView text, sub;
protected CheckBox checkbox;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View view = null;
if (convertView ==null)
{
LayoutInflater inflator = context.getLayoutInflater();
view = inflator.inflate(R.layout.list_layout, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.text = (TextView)view.findViewById(R.id.label);
viewHolder.text.setTextColor(Color.WHITE);
viewHolder.sub = (TextView)view.findViewById(R.id.sub);
viewHolder.sub.setTextColor(Color.GRAY);
viewHolder.checkbox = (CheckBox)view.findViewById(R.id.check);
if(SelectionPage.get_selectedFriendId()!=null) //checking whether user checked something earlier
{
getSelectedFriendId=SelectionPage.get_selectedFriendId(); //get checked userid from when user selects something
for( int x = 0 ; x < getSelectedFriendId.size() ; x++ )
{
for(int a=0;a<list.size();a++)
{
if(list.get(a).getId().contains(getSelectedFriendId.get(x)))
{
Toast.makeText( context, "matched..", Toast.LENGTH_SHORT).show();
viewHolder.checkbox.setChecked(true); //this doesn't check checkbox which is the problem!
}
}
}
}
viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView,boolean isChecked)
{
Model element = (Model)viewHolder.checkbox.getTag();
if(buttonView.isChecked())
{
count++;
friendName.add(element.getName().toString());
friendBirthdate.add(element.getPlace().toString());
friendId.add(element.getId().toString());
}
else
{
friendName.remove(element.getName().toString());
friendBirthdate.remove(element.getPlace().toString());
friendId.remove(element.getId().toString());
count--;
}
}
});
view.setTag(viewHolder);
viewHolder.checkbox.setTag(list.get(position));
}
else
{
view = convertView;
((ViewHolder)view.getTag()).checkbox.setTag(list.get(position));
}
ViewHolder holder = (ViewHolder) view.getTag();
holder.text.setText(list.get(position).getName());
holder.sub.setText( list.get(position).getPlace());
return view;
}
}