2016-08-18 5 views
0

J'ai enregistré du texte en utilisant FileOutputStream dans un fichier, puis je les ai affichées sur un ListView.onCliquez pour éditer les données CheckBox sur ListView

Je suis en train d'éditer le contenu par d'abord cochez la case de l'élément, puis cliquez sur un bouton pour modifier ou supprimer les données.

Je l'ai fait beaucoup de recherches, mais ne comprenais toujours pas comment mettre en œuvre cette

Voici mes codes

Pour afficher les données et les afficher sur ListView

void ShowSavedFiles() { 
    //SavedFiles = getApplicationContext().fileList(); 
    SavedFiles = getApplication().fileList(); 
    ArrayAdapter<String> adapter 
      = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, 
      SavedFiles); 

    listView.setAdapter(adapter); 
    if (adapter.isEmpty()) { 
     Toast.makeText(getBaseContext(), "There is no Address !", Toast.LENGTH_LONG).show(); 
    } 
} 

Pour modifier les données en vérifiant CheckBox, puis appuyez sur le bouton Modifier

void editData(){ 
    imgEditData.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (choiceMode == false) { 

       choiceMode = true; 
       clickAble = false; 
       multiSelectBar.setVisibility(View.VISIBLE); 
       Toast.makeText(addressActivity.this, "Edit ON", Toast.LENGTH_SHORT).show(); 
       listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
         // change the checkbox state 
         CheckedTextView checkedTextView = ((CheckedTextView) view); 
         checkedTextView.setChecked(!checkedTextView.isChecked()); 
        } 
       }); 
       ArrayAdapter<String> adapter 
         = new ArrayAdapter<String>(addressActivity.this, 
         android.R.layout.simple_list_item_multiple_choice, 
         SavedFiles); 
       listView.setAdapter(adapter); 
      }} 
    }); 
} 

une image de celui-ci pour mieux comprendre

enter image description here

Ignore les autres boutons

+0

Vous souhaitez modifier toutes les données de vérification après avoir cliqué sur le bouton d'édition ??? –

+0

@ArpitPatel Fondamentalement, je veux éditer seulement UNE données vérifiées mais je ne connais pas d'alternatives que je peux utiliser pour 'simple_list_item_multiple_choice'.Mais oui, éditer les données vérifiées après avoir cliqué sur le bouton d'édition –

Répondre

1

Faire un public class utils et il créer un public static ArrayList<Integer> positions. Et dans adapter de listview ajouter setOnClickListener sur CheckBox que quand il est cliqué et vérifié vous ajoutez cette position à public static array.

public class Utils { 
    public static ArrayList<Integer> positions =new ArrayList<>(); 
} 

En fonction getView() de votre adaptateur après gonflage mise en page ajoutez cette

CheckBox cBox= (CheckBox) view.findViewById(R.id.myCheckBox); // view is you view inflated 
final int myPos= position; //position of cuurent item will be passed into getwiew function 

     cBox.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       CheckBox temp=(CheckBox)v; 
       if(temp.isChecked()){ 
        Utils.positions.add(myPos); 
       } 
       else{ 
        Utils.positions.remove(myPos); 
       } 
      } 
     }); 

De cette façon, vous pouvez obtenir toutes liste des index dans Utils.postions qui sont vérifiés lorsque vous appuyez sur le bouton supprimer, etc., comme modifier ET en cliquant sur ces boutons, vous effectuez votre tâche requise sur ces index du tableau principal passé à l'adaptateur

Assurez-vous d'effacer que public static Arraylist chaque fois que vous popula te list view vous pouvez le faire en appelant

Utils.positions.clear() 

avant de notifier à chaque adaptateur.

+0

Si je vous comprends bien, je devrais créer un ArrayList vide qui sera rempli chaque fois que je clique sur le CheckBox? Si oui, pourriez-vous s'il vous plaît me montrer un exemple de la méthode 'public class utils' Je suis un peu confus sur la façon de l'implémenter –

+0

Je suis désolé d'être un débutant total mais je ne comprends pas comment ajouter' position' dans 'public static array' . Je ne sais pas si cela affecte beaucoup, mais je ne peux déclarer que les positions 'public ArrayList '. Ajout de 'static' semble me donner une erreur –

+0

Merci beaucoup, c'est très utile et éducatif –

0

Eh bien, vous supprimez simplement l'élément souhaité de la liste en utilisant la méthode remove() de votre ArrayAdapter.

Une façon de faire serait:

Object toRemove = arrayAdapter.getItem([POSITION]); arrayAdapter.remove(toRemove);

Une autre façon serait de modifier le ArrayList et appelez notifyDataSetChanged() sur le ArrayAdapter.

arrayList.remove([INDEX]); 
arrayAdapter.notifyDataSetChanged(); 
+0

D'accord, je peux l'utiliser pour supprimer, mais qu'en est-il d'éditer? –

+0

https://vikaskanani.wordpress.com/2011/07/27/android-focusable-edittext-inside-listview/ – Athul

+0

dans dat blog vous comprendrez comment modifier – Athul