我正在创建一个日志,我试图在其中存储用户创建的几个字符串,这些字符串随后在我的 ListView (lwItems)中检索并显示。但是,我当前的问题是,每当用户写入字符串时,整个表都会被覆盖。如何更改我的代码,以便将数组保存到共享首选项并将字符串附加到其中而不破坏以前的条目?这是我的 java 类 - (“customValues”由我的类传递给它,用户在其中输入字符串)
public class Training1 extends Fragment implements View.OnClickListener, AdapterView.OnItemClickListener {
private ListView lwItems;
private Button btnChangeItems;
private String DEFAULT_ITEMS_VALUES_STRING = "Item 1; Item 2";
private String customItemString;
private static SharedPreferences preferenceItems;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.content_main, container, false);
lwItems = (ListView) rootView.findViewById(R.id.lwItems);
preferenceItems = getActivity().getSharedPreferences("items", 0);
setHasOptionsMenu(true);
return rootView;
}
@Override
public void onCreateOptionsMenu(
Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.traning_menu_itemdetail, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// handle item selection
switch (item.getItemId()) {
case R.id.action_add:
Intent trainingCreateIntent = new Intent(getContext(), Training2.class);
startActivity(trainingCreateIntent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onResume() {
super.onResume();
Bundle setItemsIntent = getActivity().getIntent().getExtras();
if (setItemsIntent != null) {
customItemString = getActivity().getIntent().getExtras().getString("customValues");
}
String[] items;
String preferenceItemsString = preferenceItems.getString("customValues", null);
if (preferenceItemsString != null) {
items = getSplitAndTrim(preferenceItemsString);
} else {
items = getSplitAndTrim(DEFAULT_ITEMS_VALUES_STRING);
}
ArrayAdapter<String> arrayAdapter =
new ArrayAdapter<>(getActivity(), android.R.layout.simple_expandable_list_item_1, items);
lwItems.setAdapter(arrayAdapter);
lwItems.setOnItemClickListener(this);
}
@Override
public void onPause() {
super.onPause();
if (customItemString != null) {
putStringInPreferences("customValues", customItemString);
}
}
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), Training2.class);
startActivity(intent);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String textOfItem = String.valueOf(((TextView) view).getText());
Toast.makeText(getActivity(), textOfItem, Toast.LENGTH_SHORT).show();
}
public static void putStringInPreferences(String key, String customItemString) {
SharedPreferences.Editor editor = preferenceItems.edit();
editor.putString(key, customItemString);
editor.commit();
}
@NonNull
private String[] getSplitAndTrim(String preferenceItemsString) {
return preferenceItemsString.trim().split("\\s*;\\s*");
}
}
最佳答案
我猜想在这个方法中:
public static void putStringInPreferences(String key, String customItemString) {
SharedPreferences.Editor editor = preferenceItems.edit();
editor.putString(key, customItemString);
editor.commit();
}
您需要首先读出原始值,附加新项目,然后写出新字符串。此代码只是在每次调用时用新字符串覆盖旧字符串。
关于java - 保存和检索数组并在 ListView 中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35282584/