当活动调用它是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 ) );
}
注意到了。为什么这样?
答案 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();
}
希望这对任何人都有帮助