【问题标题】:Saving and loading listview data using SharedPreferences使用 SharedPreferences 保存和加载列表视图数据
【发布时间】:2016-05-20 04:13:31
【问题描述】:

我正在尝试使用 SharedPreferences 保存我的列表视图项。我已经设法在列表视图中保存和加载项目。我可以向其中添加项目,但是当我在关闭列表视图后加载它时,只会保存最近添加的项目。任何帮助将不胜感激,谢谢!

private EditText editTxt;
private ListView list;
private ArrayAdapter<String> adapter;
private ArrayList<String> arrayList;
private String item;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    editTxt = (EditText) findViewById(R.id.editText);
    list = (ListView) findViewById(R.id.List);
    arrayList = new ArrayList<String>();

    adapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.list_item, arrayList);
    list.setAdapter(adapter);
    //load data here
    LoadPreferences();
    list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

    FloatingActionButton add = (FloatingActionButton) findViewById(R.id.add);
    add.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (editTxt.getText().toString().length() == 0) {
                Toast.makeText(MainActivity.this, "Please enter something into the text box",
                        Toast.LENGTH_SHORT).show();
            } else {
                item = editTxt.getText().toString();
                arrayList.add(item);
                adapter.notifyDataSetChanged();
                //save data here
                SavePreferences("List", item);
                editTxt.setText("");
            }
        }
    });
}

//save listview data
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();
}
//load listview data
protected void LoadPreferences(){
    SharedPreferences data = PreferenceManager.getDefaultSharedPreferences(this);
    String dataSet = data.getString("List", "Add an item...");

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

【问题讨论】:

  • 尽量使用 SQLite 存储大数据

标签: android listview sharedpreferences


【解决方案1】:

您尝试将所有单击的项目保存在一个 SharedPreferences 存储库中。在将值保存到 SharedPreferences 时尝试更改名称 - 例如 SavePreferences(item.getName(), item);其中 item.getName 方法返回此项目的唯一名称。不过是个坏办法。好的方法是在数据库中存储多个数据。

【讨论】:

  • 是的,SQLite 是解决方案,SharedPreferences 是一个不错的选择。
【解决方案2】:

发生这种情况是因为每次用户从列表中选择一个项目时,存储在首选项中的前一个项目都会被新项目替换,因为每个项目都使用相同的键存储。

你可以试试这样的

//save listview data
protected void SavePreferences(String key, String value) {
    // TODO Auto-generated method stub
    SharedPreferences data = PreferenceManager.getDefaultSharedPreferences(this);

    String s=data.getString(key,""); //to fetch previous stored values

     s=s+"!"+value;   //to add new value to previous one

   data.edit().putString(key,s).commit();
}


//load listview data
protected void LoadPreferences(){
    SharedPreferences data = PreferenceManager.getDefaultSharedPreferences(this);
    String dataSet = data.getString("List", "Add an item...");

     if(dataSet.contains("!")){ //to check if previous items are there or not

     String rows[]=dataSet.split("!"); //to get individual rows of list

      for(int i=0;i<rows.length;i++){
       adapter.add(rows[i);   //to add each value to the list
       adapter.notifyDataSetChanged();
     }
 } else{
        adapter.add(dataSet);   
       adapter.notifyDataSetChanged();
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多