Элементы Listview не удаляются

#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. Да, вы должны удалить элемент из своего списка