By clicking on the button opens a dialog box in which the ListView is located. And its items CheckedTextView . ListView multi sampling. I choose, everything works fine. But when I open it back, there are no selected items.

Dialog class:

 public class DetailsSurchargeFragment extends DialogFragment { private List<String> surchargeListNames = new ArrayList<>(); private List<SurchargeFare> surchargeFareList; private List<SurchargeFare> selectedSurcharge = new ArrayList(); public RunnableUtils.RunnableParams onClickDismissRunnable; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); getDialog().setTitle("Доплата за:"); final View view = inflater.inflate(R.layout.details_surcharge_layout, container, false); final ListView listview = (ListView) view.findViewById(R.id.listView2); listview.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE); listview.setTextFilterEnabled(true); listview.setAdapter(new ArrayAdapter<>(getContext(), R.layout.details_surcharge_item, R.id.text1, surchargeListNames)); listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { selectedSurcharge.add(surchargeFareList.get(position)); } }); Button mOk = (Button) view.findViewById(R.id.button); mOk.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); if (onClickDismissRunnable != null) onClickDismissRunnable.run(getSelectedSurcharge()); } }); return view; } public List<SurchargeFare> getSurchargeFareList() { return surchargeFareList; } public void setSurchargeFareList(List<SurchargeFare> surchargeFareList) { if (surchargeFareList != null && surchargeFareList.size() > 0) { this.surchargeFareList = surchargeFareList; for (int i = 0; i < surchargeFareList.size(); i++) { surchargeListNames.add(getSurchargeFareList().get(i).surcharge_title); } } } public List<SurchargeFare> getSelectedSurcharge() { return selectedSurcharge; } } 

Question: how to save selected items?

  • In a magical way, the data itself will not be saved and restored. Write them down, for example, in SharedPreferences and pick up from there. - Yuriy SPb

1 answer 1

ListView has a getCheckedItemPositions() method that returns a SparseBooleanArray containing the item numbers that have been changed.

Before exiting activation (in the onPause() method with a ListView , you need to get this data, save it somewhere, and then when you start the activation (in the onStart() method onStart() , restore previously saved data using the setItemChecked() method.

It is easier to resolve this issue by adding a field with the current state of the mark to the model and saving this data along with the model data, although here you will need to write your own adapter.

I wrote a little about it here.