#java #android #listview #sharedpreferences
#java #Android #listview #sharedpreferences
Вопрос:
Я использую SharedPreferences
для хранения элемента listview, как показано ниже. Но элемент listview не удаляется даже после того, как я удаляю элемент из SharedPreferences
. Элемент продолжает появляться, даже если я его удаляю. Как мне это исправить?
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.events_week);
listView = (ListView) findViewById(R.id.listView);
textView = (TextView) findViewById(R.id.textView);
modify=(Button)findViewById(R.id.button10);
delete=(Button)findViewById(R.id.button11);
final String arr[]=new String[10];
sp = getSharedPreferences(USER_PREF, Context.MODE_PRIVATE);
final SharedPreferences.Editor editor = sp.edit();
list.add(s3);
editor.putString(KEY_NAME, s3);
editor.apply();
editor.commit();
adapter = new ArrayAdapter<String>(modify_events_3.this,
android.R.layout.simple_list_item_multiple_choice, list);
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
listView.setAdapter(adapter);
modify.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
clicked=true;
SparseBooleanArray checked =
listView.getCheckedItemPositions();
ArrayList<String> selectedItems = new ArrayList<String>();
for( i=0;i<checked.size();i ) {
int position;
position = checked.keyAt(i);
if (checked.valueAt(i))
selectedItems.add(adapter.getItem(position));
for ( j = 0; j < arr.length; j ) {
str = listView.getItemAtPosition(i).toString();
str = arr[j];
}
}
startActivity(new
Intent(modify_events_3.this,Pop_up.class));
Toast.makeText(getApplicationContext(), "Have anything
else in mind? ;)", Toast.LENGTH_SHORT).show();
}
});
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
checkedItemPositions = listView.getCheckedItemPositions();
int itemCount = listView.getCount();
for( i=itemCount-1; i >= 0; i--){
if(checkedItemPositions.get(i)){
str=list.get(i);
adapter.remove(str);
}
}
checkedItemPositions.clear();
adapter.notifyDataSetChanged();
editor.remove(KEY_NAME);
listView.setAdapter(adapter);
}
});
editor.apply();
editor.commit();
}
Ответ №1:
Попробуйте удалить элемент из вашего list
, а затем выполнить notifiyDatasetChanged()
ListView
отображает некоторые данные, хранящиеся в ArrayList
. Когда элемент удаляется или добавляется ArrayList
, вы должны сообщить списку, что источник данных изменился, чтобы отобразить новые данные. Итак, вот где notifyDatasetChanged()
происходит. Он сообщает ListView
, что данные были изменены, поэтому, пожалуйста, отразите измененные данные.
Комментарии:
1. Я знаю, но я просто сказал ему применить notifydatasetchanger после того, как он удалит элемент из списка, а не из адаптера
2. Ему не нужно обновлять список в адаптере, поскольку adapter.notifydatasetchanged() сделает это
3. Я объяснил, как работает notifydatasetchanged
4. Вы имеете в виду
list.remove(str)
?5. Да, вы должны удалить элемент из своего списка