2012-04-03 46 views
0

当活动调用是onStop()方法时,我设法在列表中重新加载列表项。在这里我想存储按下按钮时产生的内容。如果你读过我以前的几篇文章,你会知道发生了什么,但这是一个不同的问题。如何使用共享首选项调用列表

使用我的代码:

listLimit = listItems.size() - 1; 

       for(int i = 0; i < listLimit; i++) 
       { 
        storeList[i] = listItems.get(i).toString(); 
        tempDataStore = storeList[i]; 
        editor.putString(DATA,tempDataStore); 

       } 
       editor.commit(); 

我存储storeList的值。我知道上面的做法基本上会在迭代时覆盖tempDataStore。这意味着当它在onCreate()方法中被调用时,只会加载列表的最后一个值。那么我该如何解决这个问题?我怎样才能唯一标识每个列表项,而无需为每个列表项创建一个新的字符串变量?


UPDATE

我通过改变键上并保持价值还挺排序它。当我像这样添加它们时:

listItems.add(0, settings.getString( DATA+"0",tempDataStore)); 

它有效。但是当我尝试在for循环中做同样的事情时,如下所示:

for(int i = 0; i < listLimit; i++) 
      { 
       listItems.add(i, settings.getString( DATA+""+i,tempDataStore)); 
      } 

注意到会发生。为什么这样?

+0

什么也没有发生..你的意思是..得到错误..或列表仍然是空的? – 5hssba 2012-04-03 12:54:04

+0

列表保留为空 – Katana24 2012-04-03 12:54:51

+0

我确定了原因 - 这是因为listLimit实际上等于零,因此循环永远不会启动。所以为了纠正这个问题,我保存了列表的大小并在for循环中调用它。我会尽快发布我所做的 - 我无法提交自己的答案,因为我的信誉点数少于100个:p – Katana24 2012-04-03 13:16:56

回答

0

阅读我决定的原因 - 那是因为listLimit实际上等于因此为零循环永远不会开始。因此,要纠正这个我存储列表的价值,像这样:

listLimit = listItems.size() - 1; 
// Place size of list into storage 
editor.putInt("LIST_SIZE",listLimit); 

然后它召回for循环这里开始:

// Toast.makeText(getApplicationContext(), "list size: "+settings.getInt("LIST_SIZE",listLimit),Toast.LENGTH_LONG).show(); 
    for(int i = 0; i < settings.getInt("LIST_SIZE",listLimit); i++) 
    { 
     listItems.add(i, settings.getString( DATA+""+i,tempDataStore)); 
     adapter.notifyDataSetChanged(); 
    } 

希望这有助于谁

1

这个代码将会把所有字符串从listItems中进入喜好

edit.putInt("count", listItems.size()); 
    for (int i = 0; i< listItems.size(); i++){ 
     edit.putString(String.valueOf(i), listItems.get(i)); 
    } 
    edit.apply(); 

你可以这样

int count = sPrefs.getInt("count", 0); 
    List<String> list = new ArrayList<String>(count); 
    for (int i = 0; i < count; i++){ 
     list.add(sPrefs.getString(String.valueOf(i), "")); 
    }