【问题标题】:Saving Data from ListView using SharedPreferences使用 SharedPreferences 从 ListView 保存数据
【发布时间】:2013-01-05 19:09:19
【问题描述】:

我试图寻找答案,但找不到我要找的东西: 这是我第一次尝试保存数据/使用 SharedPreferences,所以我不太确定自己在做什么。 要点是,当用户在 EditText 中输入内容后,它会填充 ListView。但我也想要它,以便在执行此操作时,应用程序还会保存字符串,以便我可以在用户重新进入应用程序时使用 LoadPreferences 来获取它。但这不会发生

代码:

public class TaskPage extends SherlockActivity {

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");

}

我很确定我做错了什么,但没有错误。所以当我运行应用程序时,一切正常,除了没有保存(或者它只是没有显示在 ListView 中)

那么我该如何解决这个问题? 谢谢!

【问题讨论】:

    标签: android listview sharedpreferences


    【解决方案1】:

    将您的 LoadPreferences() 方法更改为:

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

    在您当前的代码中,您没有将 dataSet 添加到 ArrayAdapter

    【讨论】:

    • 是的,我会尝试这样做,但是我没有放置 arrayList 是有原因的。我第一次创建 ArrayList 时,每当我启动应用程序时,我都会得到一个强制关闭。但我会再试一次
    • 这成功了!谢谢!你能快速解释一下为什么我需要一个 ArrayList 来传递给我的 ArrayAdapter 以获取 LoadPreferences 但我在初始适配器中不需要它
    • @user1949400:查看我的编辑答案,我认为这也可以
    • 是的,它可以工作......非常感谢......我明白......我从未真正使用过我的字符串数据集来传递给适配器
    • @ρяσѕρєя K 我现在试试这个它可以工作,但它保存了最后一个文本。我的项目有很多文字我该如何解决你能看看我的问题吗
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 2016-06-09
    • 2017-11-03
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多