vendredi 17 mars 2017

Saving the selected list of string to an ArrayList in ListView with CheckBoxes

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