使用SharedPreferences从ListView中保存多个项目

时间:2014-06-14 06:37:50

标签: android eclipse listview sharedpreferences android-arrayadapter

我正在尝试创建一个简单的待办事项列表应用程序,它可能只存储一些东西。

在ListView中添加项目并关闭应用程序后,加载的唯一条目是输入的最后一个条目。如何在关闭应用程序后显示所有输入的条目?

代码:

public class MainActivity extends ActionBarActivity {

EditText display;
ListView lv;
ArrayAdapter<String> adapter;
Button addButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

display = (EditText) findViewById(R.id.editText1);
lv = (ListView) findViewById(R.id.listView1);
addButton = (Button) findViewById(R.id.button1);


adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
lv.setAdapter(adapter);
LoadPreferences();


addButton.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        String task = display.getText().toString();


            adapter.add(task);
            adapter.notifyDataSetChanged();
            SavePreferences("LISTS", task);
    }
});
}

protected void SavePreferences(String key, String value) {
// TODO Auto-generated method stub
SharedPreferences data = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = data.edit();
editor.putString(key, value);
editor.commit();


}

protected void LoadPreferences(){
SharedPreferences data = PreferenceManager.getDefaultSharedPreferences(this);
String dataSet = data.getString("LISTS", "None Available");

 adapter.add(dataSet);
 adapter.notifyDataSetChanged();
}}

提前致谢。

2 个答案:

答案 0 :(得分:0)

您必须为要添加到SharedPreferences的每个项目保持不同的密钥,否则您优先添加的最后一项将覆盖最后一项。

答案 1 :(得分:0)

我不建议使用SharedPreferences制作类似待办事项列表的应用。 创建一个SQLite数据库并存储您的待办事项。或者您可以将待办事项保存在JSON文件中,这也很容易实现。

在这种情况下,使用SharedPreferences无效,因为您需要跟踪所有待办事项首选项的键,这会产生另一个开销。

查看Lars Vogel关于创建内容提供者和SQLite数据库的这篇文章:

Android SQLite database and content provider - Tutorial