我想接收用户的列表视图项目。通过按下按钮,编辑文本中的值将被输入到列表中。并保存此列表。这样关闭程序不会破坏列表。我正在尝试使用sharedPreferences。问题是在大小。当然,如果您能给予一个使用sharedPreferences. sizeArrayList = sp.getInt的解决方案,我将不胜感激(“size”,0);这一行做得有些正确。问题是,通过添加新项并退出程序,此键的值从零开始。因此,列表项并没有全部加载。实际上,所有的项目都正确地在与设备文件资源管理器中的sharedPreferences相关的xml中。问题是改变了“size”键的值。
package com.example.todolist;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
EditText edtName;
Button btnAddAndSave, btnGo;
ListView lsv;
public static ArrayList<String>nameArrayList = new ArrayList<>();
static public SharedPreferences sp;
ArrayAdapter<String> adapter;
int counter;
int sizeArrayList;
String nam;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edtName = findViewById(R.id.edtName);
btnAddAndSave = findViewById(R.id.btnAndAndSave);
btnGo = findViewById(R.id.btnGo);
lsv = findViewById(R.id.lsv);
sp = getSharedPreferences("ArraySave",MODE_PRIVATE);
adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, nameArrayList);
sizeArrayList = sp.getInt("size",0);
for (int i = 0 ; i < sizeArrayList; i++){
nam = sp.getString(i+"", "NameDef");
nameArrayList.add(nam);
lsv.setAdapter(adapter);
}
sp.edit().putInt("size",sizeArrayList).apply();
btnAddAndSave.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
adapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, nameArrayList);
String newItem = edtName.getText().toString();
nameArrayList.add(newItem);
for (int i = 0; i < nameArrayList.size(); i++){
sp.edit().putString(i+"", nameArrayList.get(i)).apply();
sp.edit().putInt("size",counter).apply();
}
counter++;
adapter.notifyDataSetChanged();
lsv.setAdapter(adapter);
}
});
}
}
字符串
1条答案
按热度按时间zqry0prt1#
我可以使用for循环每次更新列表视图而不显示重复项。我可以使用sharedPreferences来存储值。在这里你可以看到我的解决方案。在我做的测试中,我没有发现任何问题,但如果你发现任何问题,我将非常感激,如果你能告诉我。
字符串