Я использую Arraylist в CustomDialogFragment для хранения значений каждый раз, когда пользователь устанавливает флажок.И удаляет значения, когда пользователь снимает флажок.Проблема в том, что каждый раз, когда пользователь закрывает диалоговое окно, значения в массиве списков удаляются.Я думаю, что это происходит из-за повторной инициализации массива каждый раз, когда пользователь открывает диалоговое окно.
Я думал сохранить массив в общих настройках, но не уверен, является ли это правильным способом сделать это.Пожалуйста, предложите мне, как это сделать эффективно.
CarTypeDialogFragment.java
public class CarTypeDialogFragment extends DialogFragment {
public interface OnInputListener {
void sendInput(String input);
}
public OnInputListener mOnInputListener;
CheckBox type1, type2, type4;
String SedanCheckBoxesVal, SUVCheckBoxesVal, HatchBackCheckBoxesVal;
ArrayList<String> myList = new ArrayList<String>();
View v;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
if (getArguments() != null) {
//totalCars = getArguments().getString("cars","");
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (v != null) {
if ((ViewGroup) v.getParent() != null)
((ViewGroup) v.getParent()).removeView(v);
return v;
}
v = inflater.inflate(R.layout.fragment_restype_dialog, container, false);
type1 = (CheckBox) v.findViewById(R.id.checkBox);
type1.setChecked(getFromSP("cb1"));
type2 = (CheckBox) v.findViewById(R.id.checkBox2);
type2.setChecked(getFromSP("cb2"));
type4 = (CheckBox) v.findViewById(R.id.checkBox4);
type4.setChecked(getFromSP("cb4"));
type1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (((CheckBox) view).isChecked()) {
SedanCheckBoxesVal = "'Accord','Avlon','Challenger'";
saveInSp("cb1", true);
myList.add(SedanCheckBoxesVal);
mOnInputListener.sendInput(TextUtils.join("", myList));
saveInSp("cb1enable", false);
} else {
myList.remove(SedanCheckBoxesVal);
mOnInputListener.sendInput(TextUtils.join("", myList));
saveInSp("cb1", false);
}
}
});
type2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//is chkIos checked?
if (((CheckBox) view).isChecked()) {
SUVCheckBoxesVal = "'GMC','BMW'";
saveInSp("cb2", true);
myList.add(SUVCheckBoxesVal);
mOnInputListener.sendInput(TextUtils.join("", myList));
saveInSp("cb2enable", false);
} else {
myList.remove(SUVCheckBoxesVal);
mOnInputListener.sendInput(TextUtils.join("", myList));
saveInSp("cb2", false);
}
}
});
type4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//is chkIos checked?
if (((CheckBox) view).isChecked()) {
HatchBackCheckBoxesVal = "'Polo','Micra','MiniCooper'";
saveInSp("cb4", true);
myList.add(HatchBackCheckBoxesVal);
mOnInputListener.sendInput(TextUtils.join("", myList));
saveInSp("cb4enable", false);
type4.setEnabled(false);
} else {
myList.remove(HatchBackCheckBoxesVal);
mOnInputListener.sendInput(TextUtils.join("", myList));
mOnInputListener.sendInput("");
saveInSp("cb4", false);
}
}
});
return v;
}
private boolean getFromSP(String key) {
SharedPreferences preferences = getContext().getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE);
return preferences.getBoolean(key, false);
}
private void saveInSp(String key, boolean value) {
SharedPreferences preferences = getContext().getSharedPreferences("PROJECT_NAME", android.content.Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean(key, value);
editor.commit();
}
@Override
public void onStart() {
super.onStart();
Window window = getDialog().getWindow();
WindowManager.LayoutParams windowParams = window.getAttributes();
windowParams.dimAmount = 0.00f;
windowParams.flags |= WindowManager.LayoutParams.FLAG_DIM_BEHIND;
window.setAttributes(windowParams);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
mOnInputListener = (OnInputListener) getActivity();
} catch (ClassCastException e) {
Log.e(TAG, "onAttach: ClassCastException: " + e.getMessage());
}
}
@Override
public void onDestroyView() {
//workaround for this issue: https://code.google.com/p/android/issues/detail?id=17423 (unable to retain instance after configuration change)
if (getDialog() != null && getRetainInstance())
getDialog().setDismissMessage(null);
super.onDestroyView();
}
}