1

我对 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();
    }

似乎我错过了一些简单的事情,但我无法弄清楚,所以任何帮助将不胜感激。

4

3 回答 3

1

您还没有在 strMyLists 中分配 sharedPref 值。

于 2013-09-15T07:22:06.803 回答
0

在第二个活动中,您实际上并没有分配读取共享首选项:

你应该更换

sharedPref.getString(getString(R.string.edit_message),strMyLists);

strMyLists = sharedPref.getString(getString(R.string.edit_message),strMyLists);

于 2013-09-15T04:19:36.927 回答
0

在 getString 方法中

sharedPref.getString(getString(R.string.edit_message),strMyLists);

第二个参数是默认值。所以你必须写。

strMyLists = sharedPref.getString(getString(R.string.edit_message),"");

它将与此一起使用。其余的代码很好。

于 2013-09-15T04:25:35.137 回答