android 保存列表使用SharedPreferences查看项目

uyto3xhc  于 2024-01-04  发布在  Android
关注(0)|答案(1)|浏览(132)

我想接收用户的列表视图项目。通过按下按钮,编辑文本中的值将被输入到列表中。并保存此列表。这样关闭程序不会破坏列表。我正在尝试使用sharedPreferences。问题是在大小。当然,如果您能给予一个使用sharedPreferences. sizeArrayList = sp.getInt的解决方案,我将不胜感激(“size”,0);这一行做得有些正确。问题是,通过添加新项并退出程序,此键的值从零开始。因此,列表项并没有全部加载。实际上,所有的项目都正确地在与设备文件资源管理器中的sharedPreferences相关的xml中。问题是改变了“size”键的值。

  1. package com.example.todolist;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.content.Intent;
  4. import android.content.SharedPreferences;
  5. import android.os.Bundle;
  6. import android.view.View;
  7. import android.widget.ArrayAdapter;
  8. import android.widget.Button;
  9. import android.widget.EditText;
  10. import android.widget.ListView;
  11. import android.widget.Toast;
  12. import java.util.ArrayList;
  13. public class MainActivity extends AppCompatActivity {
  14. EditText edtName;
  15. Button btnAddAndSave, btnGo;
  16. ListView lsv;
  17. public static ArrayList<String>nameArrayList = new ArrayList<>();
  18. static public SharedPreferences sp;
  19. ArrayAdapter<String> adapter;
  20. int counter;
  21. int sizeArrayList;
  22. String nam;
  23. @Override
  24. protected void onCreate(Bundle savedInstanceState) {
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.activity_main);
  27. edtName = findViewById(R.id.edtName);
  28. btnAddAndSave = findViewById(R.id.btnAndAndSave);
  29. btnGo = findViewById(R.id.btnGo);
  30. lsv = findViewById(R.id.lsv);
  31. sp = getSharedPreferences("ArraySave",MODE_PRIVATE);
  32. adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, nameArrayList);
  33. sizeArrayList = sp.getInt("size",0);
  34. for (int i = 0 ; i < sizeArrayList; i++){
  35. nam = sp.getString(i+"", "NameDef");
  36. nameArrayList.add(nam);
  37. lsv.setAdapter(adapter);
  38. }
  39. sp.edit().putInt("size",sizeArrayList).apply();
  40. btnAddAndSave.setOnClickListener(new View.OnClickListener() {
  41. @Override
  42. public void onClick(View v) {
  43. adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, nameArrayList);
  44. String newItem = edtName.getText().toString();
  45. nameArrayList.add(newItem);
  46. for (int i = 0; i < nameArrayList.size(); i++){
  47. sp.edit().putString(i+"", nameArrayList.get(i)).apply();
  48. sp.edit().putInt("size",counter).apply();
  49. }
  50. counter++;
  51. adapter.notifyDataSetChanged();
  52. lsv.setAdapter(adapter);
  53. }
  54. });
  55. }
  56. }

字符串

zqry0prt

zqry0prt1#

我可以使用for循环每次更新列表视图而不显示重复项。我可以使用sharedPreferences来存储值。在这里你可以看到我的解决方案。在我做的测试中,我没有发现任何问题,但如果你发现任何问题,我将非常感激,如果你能告诉我。

  1. package com.example.mynote;
  2. import androidx.appcompat.app.AppCompatActivity;
  3. import android.content.Context;
  4. import android.content.SharedPreferences;
  5. import android.os.Bundle;
  6. import android.text.style.TtsSpan;
  7. import android.view.View;
  8. import android.widget.AdapterView;
  9. import android.widget.ArrayAdapter;
  10. import android.widget.Button;
  11. import android.widget.EditText;
  12. import android.widget.ListView;
  13. import android.widget.Toast;
  14. import com.google.gson.Gson;
  15. import com.google.gson.reflect.TypeToken;
  16. import java.io.FileInputStream;
  17. import java.io.FileNotFoundException;
  18. import java.io.FileOutputStream;
  19. import java.io.IOException;
  20. import java.lang.reflect.Type;
  21. import java.util.ArrayList;
  22. public class MainActivity extends AppCompatActivity {
  23. Button btnAddNote;
  24. ListView lsv;
  25. ArrayList<String> nameArray = new ArrayList<>();
  26. SharedPreferences sp;
  27. EditText edtItem;
  28. int counter = 1;
  29. ArrayAdapter adapter;
  30. @Override
  31. protected void onCreate(Bundle savedInstanceState) {
  32. super.onCreate(savedInstanceState);
  33. setContentView(R.layout.activity_main);
  34. btnAddNote = findViewById(R.id.btnAddNote);
  35. lsv = findViewById(R.id.lsv);
  36. edtItem = findViewById(R.id.edtItem);
  37. sp = getSharedPreferences("NameSubject", MODE_PRIVATE);
  38. adapter = new ArrayAdapter(MainActivity.this,
  39. android.R.layout.simple_list_item_1, nameArray);
  40. counter = sp.getInt("count", 1);
  41. btnAddNote.setOnClickListener(new View.OnClickListener() {
  42. @Override
  43. public void onClick(View v) {
  44. String item = edtItem.getText().toString();
  45. sp.edit().putString("subject" + counter, item).apply();
  46. nameArray.add(sp.getString("subject" + counter, "s"));
  47. counter++;
  48. sp.edit().putInt("count", counter).apply();
  49. adapter.notifyDataSetChanged();
  50. lsv.setAdapter(adapter);
  51. edtItem.setText("");
  52. }
  53. });
  54. for (int i = 1; i < counter; i++) {
  55. nameArray.add(sp.getString("subject" + i, "s"));
  56. adapter.notifyDataSetChanged();
  57. lsv.setAdapter(adapter);
  58. }
  59. lsv.setAdapter(adapter);
  60. lsv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  61. @Override
  62. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  63. Toast.makeText(MainActivity.this, nameArray.get(position), Toast.LENGTH_SHORT).show();
  64. }
  65. });
  66. }
  67. }

字符串

展开查看全部

相关问题