2015-05-15 2 views
1

Это, как я добавить общие предпочтенияудалять общие предпочтения в андроида

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 значение и удалить его из списка

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

Теперь моя проблема заключается в том, что он оставляет пустое пространство, когда я вызываю его так же, как закрытие активности, и снова открывая его, значение, которое я удалил, имеет пустое пространство. Так же, как это изображение ниже я удалил «два», но когда я закрыть и открыть приложение, оно дает мне пустое пространство

как я заполнить адаптер

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

Я столкнулся с той же проблемой. Я понял, как это сделать. Это может быть не самый лучший способ, но он делает то, что нужно сделать. Вы должны уменьшить каждую величину после удаляемого значения в SP 1

, если у вас есть значения в зр как

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

так делают их по-прежнему, вставив "значение [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(); 
    } 
+0

Можете ли вы дать мне пример кода, просто отредактировав мой код, потому что я получаю то, что вы говорите, но как вы можете это реализовать? повторив общие привилегии? – Brendom

+0

Я реализовал его. подождите, я отредактирую ответ –

+0

@Brendom Я обновил свой ответ –

Смежные вопросы