簡體   English   中英

android共享首選項似乎被覆蓋Java

[英]android shared preferences seem to be overwritten Java

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

看來我想念的東西一定很簡單,但我一直無法弄清楚,因此對您的幫助將不勝感激。

您仍然沒有在strMyLists中分配sharedPref值。

在第二個活動中,您實際上並未分配讀取的共享首選項:

你應該更換

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

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

在getString方法中

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

第二個參數是默認值。 所以你將不得不寫。

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

它將與此一起工作。 其余代碼很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM