我对 android 编码很陌生。我尝试使用 SavePreferences 来为 ListView 保存用户输入的数据。然而,这种方法导致只保存用户输入的最后一个项目,而不是整个 ListView。(我认为这是因为我覆盖了键,所以它只会显示最后一个值)
然后有人建议我应该使用 JSONArray 但我不明白发生了什么。
我使用 JSONArray 的代码如下: 注意:JSONArray 上有一堆错误,因为我认为我没有使用正确的密钥。
public class TaskPage extends SherlockActivity {
EditText display;
ListView lv;
ArrayAdapter<String> adapter;
Button addButton;
ArrayList<String> dataSetarrlist = new ArrayList<String>();
@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_multiple_choice);
lv.setAdapter(adapter);
LoadPreferences();
// setChoiceMode places the checkbox next to the listviews
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);
JSONArray array = new JSONArray(data.getString(key, value));
SharedPreferences.Editor editor = data.edit();
editor.putString(key, value);
editor.commit();
}
protected void LoadPreferences(){
SharedPreferences data = PreferenceManager.getDefaultSharedPreferences(this);
JSONArray dataSet1 = new JSONArray(data.getString("LISTS", "None Available"));
for(int i = 0; i<dataSet1.length(); i++)
adapter.add(dataSet1.getString(i));
adapter.notifyDataSetChanged();
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_multiple_choice,dataSetarrlist);
lv.setAdapter(adapter);
// setChoiceMode places the checkbox next to the listviews
}
在这一点上我很困惑,所以有人可以告诉我我哪里出错并提供一些示例代码。我几乎可以肯定这是因为我没有正确使用键和值来保存数据,但我似乎无法正确最后,是否有另一种方法我不必使用 JSONArray 以便它仍会显示所有用户列表视图中的输入。
编辑的代码如下
addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
String task = display.getText().toString();
adapter.add(task);
dataSetarrlist.add(task);
adapter.notifyDataSetChanged();
SavePreferences("LISTS", dataSetarrlist.toString());
}
});
}
protected void SavePreferences(String key, String value) {
// TODO Auto-generated method stub
SharedPreferences data = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = data.edit();
editor.putString("LISTS", dataSetarrlist.toString());
editor.commit();
}
protected void LoadPreferences(){
SharedPreferences data = PreferenceManager.getDefaultSharedPreferences(this);
String dataSet = data.getString("LISTS", dataSetarrlist.toString());
ArrayList<String> dataSetarrlist = new ArrayList<String>();
dataSetarrlist.add(dataSet);
adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_multiple_choice,dataSetarrlist);
lv.setAdapter(adapter);
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
// setChoiceMode places the checkbox next to the listviews
}