2 votes

Simple_List_item_checked Comment conserver la coche après un changement d'activité ?

Je suis en train de créer une application de liste d'épicerie et je veux que ma liste d'épicerie soit divisée par département (boulangerie, fruits, viande, etc.). Pour l'instant, j'ai créé la liste et je suis capable de remplir un fichier de stockage externe et de récupérer l'information par département.

Tout fonctionne bien jusqu'à ce que j'appuie sur le bouton précédent de ma phne et que je clique sur le bouton pour revenir à la vue de la liste de fruits, mes éléments ne sont plus cochés.

J'ai essayé d'utiliser la méthode onSaveinstance/onRestore avec le bundle mais cela n'a pas fonctionné. J'ai également lu des articles sur les préférences partagées mais je ne suis pas sûr que ce soit ce dont j'ai besoin et comme j'utilise Simple_list_item_checked, je ne sais pas comment l'utiliser.

public class FruitList_Activity extends AppCompatActivity  {

private ListView fruitsList;
private ArrayAdapter<String> adapterFruit;
private Button btn_Delete;
private Button btn_SelectAll;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate (savedInstanceState);
    setContentView (R.layout.activity_fruit_list_);

    fruitsList = findViewById(R.id.list_Fruits);
    fruitsList.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);

    btn_Delete = findViewById (R.id.btn_delete);
    CreateActivity.itemsFruit = FileHelper.readData(this);

    adapterFruit = new ArrayAdapter<String>(this,     android.R.layout.simple_list_item_checked, CreateActivity.itemsFruit);
    fruitsList.setAdapter(adapterFruit);

    /*Remove items*/
    btn_Delete.setOnClickListener(new View.OnClickListener()
    {

        public void onClick(View v)
        {

            SparseBooleanArray checkedItemPositions = fruitsList.getCheckedItemPositions();
            int itemCount = fruitsList.getCount();

            for(int i=itemCount-1; i >= 0; i--){
                if(checkedItemPositions.get(i)){
                    fruitsList.setItemChecked(i,true);
                    adapterFruit.remove(CreateActivity.itemsFruit.get(i));
                    FileHelper.writeData(CreateActivity.itemsFruit, FruitList_Activity.this );

                }
            }

            adapterFruit.notifyDataSetChanged();

        }
    });

}
}

Je commence tout juste à utiliser Java, alors j'aimerais avoir des conseils et des instructions claires.

0voto

jampez77 Points 379

Dans le onResume vous pourriez configurer votre adaptateur comme suit pour remplir votre liste au retour.

public void onResume(){
    super.onResume();
    adapterFruit = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, CreateActivity.itemsFruit);
    fruitsList.setAdapter(adapterFruit);
}

Vous pourriez aussi vouloir mettre à jour votre configChanges dans votre manifeste pour empêcher la mise en page de changer en raison d'un autre événement (comme l'orientation). Dans le <application étiquette :

<activity android:name=".FruitList_Activity"
        android:configChanges="orientation|keyboardHidden|screenLayout|screenSize"/>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X