如何使用“共享首选项”调用列表

时间:2012-04-03 12:35:07

标签: android sharedpreferences

当活动调用它是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()方法中被调用时,只会加载列表的最后一个值。那么我该如何解决这个问题呢?如何在不为每个列表项创建新的String变量的情况下唯一标识每个列表项?


更新

我有点通过更改键并保持值来对其进行排序。当我像这样添加它们时:

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

有效。但是当我尝试在for循环中做同样的事情时,就像这样:

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

注意到了。为什么这样?

2 个答案:

答案 0 :(得分: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), ""));
    }

答案 1 :(得分: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();
    }

希望这对任何人都有帮助