我对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();
}
似乎它一定是我想念的简单但我无法弄明白所以任何帮助都会受到高度赞赏。
答案 0 :(得分:1)
您仍未在strMyLists中分配sharedPref值。
答案 1 :(得分:0)
在第二个活动中,您实际上并未分配读取共享首选项:
你应该替换
sharedPref.getString(getString(R.string.edit_message),strMyLists);
与
strMyLists = sharedPref.getString(getString(R.string.edit_message),strMyLists);
答案 2 :(得分:0)
在getString方法中
sharedPref.getString(getString(R.string.edit_message),strMyLists);
第二个参数是默认值。所以你必须写。
strMyLists = sharedPref.getString(getString(R.string.edit_message),"");
它将适用于此。其余代码很好。