Aller au contenu

button delete row listview


janoka

Recommended Posts

Bonjour,

 

J'ai un layout qui contient une ListView et un bouton supprimer. Sur chaque ligne de ma listView il y a un radio button et un textView.

L'Activity liée au layout hérite de ListActivity. Dans cette activity je rempli ma listView avec CursorSimpleAdapter.

Sur cette écran, l'utilisateur peut :

                 .soit cliquer sur une ligne, et dans ce cas une autre activity apparait. Pour cela j'utilise la méthode setOnItemClick, pas de souci.

 

                 .soit selecionner une ligne par le biai d'un radio button et ensuite appuyer le bouton supprimer pour supprimer la ligne de la listView et ainsi supprimer les infos de cette ligne dans ma base de donnée.

 

                 Et la je ne sais pas comment faire. Déjà est-ce que c'est possible ? apparement oui avec un customAdapter d'après certains topics.... L'idéal serait de récupérer l'id de ma ligne par le radio button selectionné et de faire appel a une méthode pour supprimer cette ligne avec en parametre l'id lors du click sur le bouton supprimer. Mais comment faire ?

 

Voici le code de mon Activity

public class LesComptes extends ListActivity {

        private RadioButton RbtnSelect = null;
	private Button BtnSup;
	private ListView LvCompte;
	private DBAdapter db;
	private Cursor cursor;
	private int idUtilisateur;
	private int idCompte;
	private Utilisateur utilisateur;
	private Compte compte;
	private Bundle bundle;
	 final Context context = this;
	//constante pour les alertDial
			private final static int ID_NOT_SELECT = 0;
			private final static int ID_NOT_COMPTE = 1;
	public Utilisateur getUtilisateur(){
		return utilisateur;
	}
	public void setUtilisateur(Utilisateur utilisateur){
		this.utilisateur = utilisateur;
	}
	
	public Compte getCompte(){
		return compte;
	}
	public void setCompte(Compte compte){
		this.compte = compte;
	}
	
	
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.les_comptes);
		
		RbtnSelect = (RadioButton)findViewById(R.id.RbtnSelect);
		BtnSup = (Button)findViewById(R.id.BtnSup);
		BtnApercu = (Button)findViewById(R.id.BtnApercu);
		LvCompte = (ListView)findViewById(android.R.id.list);
		db = new DBAdapter(getApplicationContext());
		db.open();
		bundle = this.getIntent().getExtras();
		utilisateur = new Utilisateur();	
	    compte = new Compte();
       
	    ListView();
	    AddListenerOnBtnSupprimer();
	}
	
	public void ListView(){
	    //On récupère les données du Bundle
    	idUtilisateur = (Integer) bundle.get("COL_ID");
    	
        	//selectionne liste de compte de l'utilisateur
        	cursor = db.SelectDesComptesUtilisateur(idUtilisateur);
        	
        	if(cursor.getCount() != 0){	
            cursor.moveToFirst();		
        	startManagingCursor(cursor);
        
        	try{
        	//apparaitre les données d'un compte sur la liste	
			SimpleCursorAdapter adapte = new SimpleCursorAdapter(this, R.layout.listeview_compte, cursor, 
					new String[]{"COL_BANK","COL_TITRE","COL_TOTAL"},new int[]{R.id.TvBank,R.id.TvNom,R.id.TvMontant});
			LvCompte.setAdapter(adapte);
			LvCompte.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

			//click sur une ligne de la liste et une nouvelle fenetre apparait	
			LvCompte.setOnItemClickListener(new OnItemClickListener(){
				@Override
	        	@SuppressWarnings("unchecked")
				public void onItemClick(AdapterView<?> a, View v, int position, long id) {
					compte.setIdCompte((int)id);
					
					//méthode pour la liste des transactions
					//id du compte dans le bundle
					bundle.putInt("Id_compte",compte.getIdCompte());
					Intent intent = new Intent(LesComptes.this, LesTransactions.class);
					intent.putExtras(bundle);
					startActivity(intent);
				}
			});
        	
        	}catch(Exception e){
        		Log.e("tag", "BOUM !", e);
			}
        	
        	}else{
        		
            LvCompte = (ListView)findViewById(android.R.id.list);
            BtnSup.setEnabled(false);
            showDialog(ID_NOT_COMPTE);
        	}     	

Merci pour vos suggestions.

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Pour ton pb de suppression d'un élément de ta liste, je ne passerais pas par un bouton radio (et pas besoin d'un CustomAdapter). Le problème du bouton radio dans chaque élément de la liste, c'est que tu vas avoir un souci de conflit entre le liste du click d'un élément (géré par la ListView) et le click de séléction du bouton radio (géré par le bouton radio). En fait ce dernier ne verra jamais le click, puisqu'il aura été intercepté par la ListView

Il y a une meilleure solution, c'est d'utiliser par ex le click long sur un élément de la liste; tu positionnes un Listener pour clicks longs (setOnItemLongClickListener sur la ListView), qui te permettra d'afficher par exemple un menu contextuel te donnant le choix d'action complémentaire à faire sur l'élément sélectionné)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à toi,

 

J'ai fait presque l'équivalent de ce que tu essaye de faire.

J'ai un listview avec une icone suppression et quand l'utilisateur click dessus l'element se supprime.

Pour mettre ça en place j'ai utilisé un ArrayAdapter et j'ai override getView. Comme ceci:

private class MyArrayAdapter extends ArrayAdapter<T> {

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            View itemView = convertView;

            // Make sure we have a view to work with
            if (itemView == null) {
                itemView = getActivity().getLayoutInflater().inflate(layout de ton item, parent, false);
            }

            // Manager deleteButton
            ImageView deleteButton = (ImageView) itemView.findViewById(R.id.deleteImage);
            deleteButton.setVisibility(View.VISIBLE);
            deleteButton.setClickable(true);
            deleteButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        // delete ton item ou appelle ta class qui va sauvegarder position.
                    }
                });
            return itemView;
        }
    }

Si ça te semble flou je te conseil de regarder des tutoriels sur la création de listview a partir d'un arrayadapter personnnalisé.

En espérant t'avoir aidé :)
 

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...