Bonjour à tous,

Il se trouve que je rencontre un problème pour supprimer les items sélectionnés de ma Listview, que j'utilise avec le mode contextual action bar.
Le problème est que lorsque je sélectionne des items de même valeur et que je les supprime, un décalage est effectué et seul 1 des items est correctement supprimé, tandis que d'autre son supprimé sans avoir été sélectionné
Je pense que le problème viens de la méthode de l'adapter notifyDataSetChanged(), j'ai lu qu'il était préférable de l'appeler dans le thread principal (Je suis actuellement dans un fragment), j'ai donc essayé mais sans succès.

Je me tourne donc vers vous, si quelqu'un sait comment pallier ce problème, ou peut tout simplement m'indiquer si j'ai commis une erreur...

Merci d'avance, voici le code de mon fragment avec ma listview

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package flyzzx.logistikv2.fragments;
 
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.SparseBooleanArray;
import android.view.ActionMode;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
 
import java.util.ArrayList;
 
import flyzzx.logistikv2.R;
import flyzzx.logistikv2.customviews.ListViewCAB;
 
public class ListViewCabFragment extends Fragment implements AbsListView.MultiChoiceModeListener {
    ListView list = null;
    ArrayList<String> data = null;
    ArrayAdapter<String> adapter = null;
 
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.listviewcab_fragment, container, false);
        list = (ListView) view.findViewById(R.id.listView_expe);
        Initialize();
        return view;
    }
 
    public void add(String data) {
        adapter.add(data);
        adapter.notifyDataSetChanged();
    }
 
    private void Initialize() {
        data = new ArrayList<>();
        adapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_list_item_multiple_choice, data);
        list.setAdapter(adapter);
        list.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
        list.setMultiChoiceModeListener(this);
    }
 
    private void removeSelected() {
        SparseBooleanArray checkeditems = list.getCheckedItemPositions();
 
        for(int i = list.getCount() - 1; i >= 0; i--) {
            if(checkeditems.get(i)) {
                adapter.remove(data.get(i));
            }
        }
 
        adapter.notifyDataSetChanged();
        checkeditems.clear();
    }
 
    @Override
    public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
        mode.setTitle(list.getCheckedItemCount() + " item(s) sélectionné(s)");
    }
 
    @Override
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
        MenuInflater inflater = mode.getMenuInflater();
        inflater.inflate(R.menu.menu_cab, menu);
        return true;
    }
 
    @Override
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
        return false;
    }
 
    @Override
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
        switch(item.getItemId()) {
            case R.id.menucab_delete:
                removeSelected();
                mode.finish();
                break;
        }
 
        return true;
    }
 
    @Override
    public void onDestroyActionMode(ActionMode mode) {
 
    }
}