在将其保存在sharedPreferences中后,我在ListView中设置新值时遇到问题。
在图片上,您可以看到我在智能手机屏幕上看到的内容(更容易为我描述)。如果我现在按下项目“Korrektur-Faktor”,则会打开一个AlertDialog,我可以设置一个新值。
如果我现在按保存,新值(80)将保存在SharedPreferences中,但我的ListViewItem的第二行中的值不会自动更新。
这里有一些代码:
String secLineCorrect = correctvalue.toString();
ValueSettings targetValue = new ValueSettings("Zielwert", "getTargetSharedPref"); //TODO
ValueSettings correctFactor = new ValueSettings("Korrektur-Faktor", secLineCorrect + " mg/dl pro 1IE");
//Füllen der ListView
final ArrayList<ValueSettings> valuesSettingsList = new ArrayList<>();
valuesSettingsList.add(targetValue);
valuesSettingsList.add(correctFactor);
final ValueSettingsListAdapter valuesSettingsAdapter = new ValueSettingsListAdapter(this, R.layout.settings_list_item_two_lines, valuesSettingsList);
lvValues.setAdapter(valuesSettingsAdapter);
//Klickbare Items
lvValues.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
switch(position){
//First Item in List
case 0:
Toast.makeText(SettingsActivity.this, "You clicked on: " + valuesSettingsList.get(position).getFirstLine() + "mit Item Nummer" + position, Toast.LENGTH_SHORT).show();
break;
//Second Item in List
case 1:
AlertDialog.Builder mBuilder = new AlertDialog.Builder(SettingsActivity.this);
View mView = getLayoutInflater().inflate(R.layout.dialog_correctfactor,null);
final EditText mCorrectFactor = (EditText) mView.findViewById(R.id.et_correct_factor_input);
Button mCancel = (Button) mView.findViewById(R.id.btn_cancel);
Button mSave = (Button) mView.findViewById(R.id.btn_save);
mBuilder.setView(mView);
final AlertDialog dialog = mBuilder.create();
dialog.show();
//Click on Cancel
mCancel.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
Toast.makeText(SettingsActivity.this, "Abgebrochen. Kein neuer Wert eingespeichert!", Toast.LENGTH_SHORT).show();
}
});
//Click on Save
mSave.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
if(mCorrectFactor.getText().length() > 0){
correctvalue = Integer.parseInt(mCorrectFactor.getText().toString());
editor.putInt(correctValueKEY, correctvalue);
editor.commit();
Toast.makeText(getApplicationContext(), "1 IE entspricht " + correctvalue + " mg/dl.", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(getApplicationContext(), "Wert ist auf " + correctvalue + " md/dl gesetzt. Keine Änderung vorgenommen.", Toast.LENGTH_LONG).show();
}
dialog.cancel();
}
});
break;
}
}
});
如您所见,我在代码的开头设置了文本。因此,每当我想要显示之前保存的新值时,我必须返回到我的主要活动并启动设置 - 活动新。但是现在我希望在我按下save并关闭AlertDialog之后,会显示新值。我尝试了很多,但从来没有得到解决方案。 愿有人可以帮助我:)
答案 0 :(得分:1)
首先,您应确保保存的值反映在valuesSettingsList
中,如woodii所示。
您可以在保存新值后添加此行:
valuesSettingsAdapter.notifyDataSetChanged();
答案 1 :(得分:1)
对于此类功能,我可以建议PreferenceFragment
或PreferenceActivity
。
无论如何,您可以使用SharedPreferences.OnSharedPreferenceChangeListener
并覆盖方法onSharedPreferenceChanged
并相应地更新列表中的条目。
目前,您只更改SharedPreferences
中的存储值,而不更改列表中的可见值。