Jump to content

button delete row listview


janoka
 Share

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.

Link to comment
Share on other 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é)

Link to comment
Share on other 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é :)
 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...