我对 android 编程很陌生,所以我确信有些简单的事情我做得不对。我有两个正在访问共享首选项文件的活动;一个从其中读取并将内容显示到列表中,另一个读取内容并根据用户输入将新项目添加到列表中。我遇到的问题:当我从文件中读取内容并尝试将新项目添加到列表中时,我的原始列表被覆盖。也许这不是实际发生的事情,但在我看来,这就是问题所在。当我从子活动添加新项目并返回显示列表的原始活动时,我只看到我保存的最新项目,而不是我之前创建的任何其他项目。
第一个活动是主要活动,它只是读取共享首选项并将项目添加到字符串中,用逗号分隔并在列表视图中显示它们。我只展示了在列表视图中显示项目的方法:
public void addItems() {
String strLists="";
SharedPreferences sharedPref = getSharedPreferences("ListNamesFile", MODE_PRIVATE);
strLists = sharedPref.getString(getString(R.string.edit_message), strLists);
listItems.clear();
String[] myLists = strLists.split(",");
for(int r=0;r<myLists.length;r++){
listItems.add(myLists[r].toString());
}
//test adding an extra list item to make sure that the issue isn't from adding
//items to the listview
//listItems.add("test");
adapter.notifyDataSetChanged();
}
第二个活动是从编辑文本控件中获取新字符串,将其添加到带有列表项的字符串的末尾,并将更改提交到共享首选项文件。我已经包含了检索共享首选项并将新项目写入字符串末尾的方法:
public void createListOnClick(View view){
//create a file for storing list items
SharedPreferences sharedPref = getSharedPreferences("ListNamesFile", MODE_PRIVATE);
String strMyLists = "";
sharedPref.getString(getString(R.string.edit_message),strMyLists);
String[] lists = strMyLists.split(",");
StringBuilder sb = new StringBuilder();
for (int i = 0; i < lists.length; i++) {
sb.append(lists[i]);
sb.append(",");
}
SharedPreferences.Editor editor = sharedPref.edit();
EditText txtListName = (EditText)findViewById(R.id.txt_list_name);
sb.append(txtListName.getText().toString());
editor.putString(getString(R.string.edit_message), sb.toString());
editor.commit();
finish();
}
似乎我错过了一些简单的事情,但我无法弄清楚,所以任何帮助将不胜感激。