删除android中的共享首选项

时间:2015-05-15 20:56:31

标签: android sharedpreferences

这就是我添加共享偏好的方式

    ct = sp.getInt("count", 0);
    if (ct > 0) {
        for (int i = 0; i <= ct; i++) {
            list.add(sp.getString("Value[" + i + "]", ""));
        }
    }
        adp = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, list);
        Listtt.setAdapter(adp);
        btnad.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                sped.putString("Value[" + ct + "]", editText.getText().toString());
                sped.commit();
                list.add(sp.getString("Value[" + ct + "]", ""));
                ct += 1;
                sped.putInt("count", ct);
                adp.notifyDataSetChanged();

            }
        });

通过这个我可以成功删除Sharedprefrences Value并将其从列表中删除

 sp.edit().remove("key_to_remove").apply();
             adp.remove("name_to_rmv");
             adp.notifyDataSetChanged();

现在我的问题是,当我将其调回时就像关闭活动一样留下空白并再次打开它,我删除的值有空格。就像下面这张图片一样,我删除了#34;两个&#34;但当我关闭并打开我的应用程序时,它给了我空白

我如何填充适配器

 ct = sp.getInt("count", 0);
        if (ct > 0) {
            for (int i = 0; i <= ct; i++) {
                list.add(sp.getString("Value[" + i + "]", ""));
            }
        }
            adp = new ArrayAdapter<String>(this,
                    android.R.layout.simple_list_item_1, list);
            Listtt.setAdapter(adp);

Example output

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。我想出了一种方法来做到这一点。这可能不是最好的方法,但它可以做需要做的事情。你不得不 将SP中删除的值后的每个值减1

如果您的值为sp,则为

"value[0]","one"
"value[1]","two"
"value[2]","three"
"value[3]","four"  

删除“值[1]”后,它将是

"value[0]","one"
"value[2]","three"
"value[3]","four"
(that's why it returns null string when you try to fetch "value[1]" because there are no such a value)
  

所以通过插入“value [1]”使它们继续。这意味着将您的现有值(“值[ 2 ]”,“三”)修改为(“值[ 1 ]”,“三”)。并将其应用于其他值。你可以通过for循环来做到这一点。然后你的最终价值就是这样。

"value[0]","one"
"value[1]","three"
"value[2]","four"

正如您所看到的,当您回读时不会有任何空白。您必须将计数器减1,因为现在只有3个值。

    void deleteItem(int element_num,int counter,SharedPreferences sp,ArrayAdapter<String> adp){


        //element_num is the element number that you want to delete
        String name_to_rmv=sp.getString("Value[" + element_num + "]", ""); //backup the value that needs to be deleted

        SharedPreferences.Editor editor=sp.edit();

        for(int i=element_num;i<counter;i++)
            editor.putString("Value[" + i + "]", sp.getString("Value[" + (i+1) + "]", "")); //read i+1 value and store it to i

        counter--;              //decrease counter
        editor.putInt("count", counter);
        editor.commit();

        adp.remove(name_to_rmv);    
        adp.notifyDataSetChanged();
    }