我已经挣扎了两个多星期了。关于共享偏好和其他黑客的所有SO问题。坚持多项选择alertdialog。但不幸的是,我仍然无法使其发挥作用。
有人可以向我解释如何让这件事有用吗?我的多选alertleialog工作。但我仍然无法保存所选项目..
我的代码:
public class TimelineSettings extends DialogFragment {
Context context;
final ArrayList selected_categories = new ArrayList();
final String[]items = {"Fourniture","Nourriture","Voyages","Habillement","Médias","Autres"};
TinyDB tinydb = new TinyDB(context);
private SharedPreferences sharedPreference;
private SharedPreferences.Editor sharedPrefEditor;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// Set the dialog title
builder.setTitle("Choisissez vos paramètres")
.setMultiChoiceItems(items, null,
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int indexselected,
boolean isChecked) {
if (isChecked) {
// If the user checked the item, add it to the selected items
selected_categories.add(indexselected);
} else if (selected_categories.contains(indexselected)) {
// Else, if the item is already in the array, remove it
selected_categories.remove(Integer.valueOf(indexselected));
}
}
})
// Set the action buttons
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
tinydb.putList("selected",selected_categories);
}
})
.setNegativeButton("Annuler", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
}
});
return builder.create();
}
}
感谢您的帮助。
PS:我遇到了这个answer,如果你能向我解释如何做这项工作,那就太棒了。答案 0 :(得分:3)
请注意,因为您要将Integers
保存在偏好设置中,然后将ArrayList
Integers
转换为ArrayList
Strings
。这可能会导致Exception
。改为使用ArrayLists
的{{1}}代替。
在您展示Strings
之前,您只是错过了这一部分,您必须阅读已保存的选项并在DialogFragment
中查看。
有最简单的方法可以做你想做的事,但让我们采取这种方法:
正如您所注意到的,DialogFragment
方法会收到setMultiChoiceItems()
作为String[]
和DialogFragment
的项目,以定义是否选中它们。我们将使用这个数组来坚持我们的选择。此数组必须与items数组具有相同的长度,并且最初将设置为false。
首次启动boolean []
时,不会检查任何项目。第二次,当您已经检查了项目时,您将从TinyDB中读取这些选项,并使用for语句填充布尔数组。然后将其提供给DialogFragment
构建器。
保存的项目将在DialogFragment
上显示为已选中,如您所愿。
以下是完整的已更改和正常运行的代码:
DialogFragment