How can I save the text from the check boxes checked in a listview? I am trying to store the selected items to an array but when I scroll down the text gets removed. I have checked many post but couldn't get it work.
public class TimezoneAdapter extends ArrayAdapter{
private List<Timezones> list;
private Activity context;
private LayoutInflater inflater;
ViewHolder viewHolder = null;
ArrayList<String> selectedCitiesList;
// Constructor
public TimezoneAdapter(Activity activity, ArrayList<Timezones> timeZone){
super(activity, 0, timeZone);
this.context = activity;
this.list = timeZone;
inflater = LayoutInflater.from(activity);
}
static class ViewHolder {
// The child views in each row.
protected TextView text;
protected CheckBox checkbox;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
selectedCitiesList = new ArrayList<>();
if (convertView == null) {
LayoutInflater inflater = context.getLayoutInflater();
convertView = inflater.inflate(R.layout.navigation_list_item, null);
viewHolder = new ViewHolder();
viewHolder.text = (TextView) convertView.findViewById(R.id.time_text_view_nav);
viewHolder.checkbox = (CheckBox) convertView.findViewById(R.id.city_name_check_box_nav);
viewHolder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// Here we get the position that we have set for the checkbox using setTag.
int getPosition = (Integer) buttonView.getTag();
list.get(getPosition).setSelected(buttonView.isChecked());
boolean selectedCheckbox = list.get(getPosition).isSelected();
String selectedCity = list.get(getPosition).getCity();
if (selectedCheckbox){
selectedCitiesList.add(selectedCity);
} else {
selectedCitiesList.remove(selectedCity);
}
Toast.makeText(context, selectedCitiesList.toString(), Toast.LENGTH_SHORT).show();
SharedPreferences sharedPreferences = getContext().getSharedPreferences("preferences", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("selected_cities", selectedCitiesList.toString());
editor.apply();
}
});
convertView.setTag(viewHolder);
convertView.setTag(R.id.time_text_view_nav, viewHolder.text);
convertView.setTag(R.id.city_name_check_box_nav, viewHolder.checkbox);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.checkbox.setTag(position);
viewHolder.text.setText(list.get(position).getTime());
viewHolder.checkbox.setText(list.get(position).getCity());
viewHolder.checkbox.setChecked(list.get(position).isSelected());
return convertView;
}
}
Aucun commentaire:
Enregistrer un commentaire