Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    509

    [android]listview con edittext perdita dati

    Ciao a tutti,
    ho un problema con una listview con customadapter dove ogni row contiene una checkbox e un edittext.

    il problema è nell'edittext, qualcosa mi sfugge.
    in pratica scrollando la lista non perde la posizione.


    questo è il customAdapter che sto utilizzando al momento.

    quale potrebbe essere il problema della perdita di posizione?

    codice:
    public class CustomAdapter extends ArrayAdapter<Articolo>{
    	
        public CustomAdapter(Context context, int textViewResourceId, List list) {
            super(context, textViewResourceId, list);
        }
        
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            return getViewOptimize(position, convertView, parent);
        }
        
        public View getViewOptimize(int position, View convertView, ViewGroup parent) {
        	//articoli da visualizzare
        	final Articolo a = getItem(position);
        	
    		TextView codice;
    	    TextView marca;
    	    TextView prezzo;
    	    CheckBox checkbox;
    	    EditText quanti;
    		
            if (convertView == null) {
                LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                convertView = inflater.inflate(R.layout.buy_row_prodotto, null);
                
                // Find the child views.
                checkbox= (CheckBox)convertView.findViewById(R.id.checkBox1);
                codice = (TextView)convertView.findViewById(R.id.codice);
                marca = (TextView)convertView.findViewById(R.id.marchio);
                prezzo = (TextView)convertView.findViewById(R.id.prezzo);
                quanti = (EditText)convertView.findViewById(R.id.quantita);
                // Optimization: Tag the row with it's child views, so we don't
             	// have to
             	// call findViewById() later when we reuse the row.            
                convertView.setTag(new ViewHolder(codice, marca, prezzo, quanti, checkbox));
                
    			// If CheckBox is toggled, update the planet it is tagged with.
    			checkbox.setOnClickListener(new View.OnClickListener() {
    				public void onClick(View v) {
    					CheckBox cb = (CheckBox) v;
    					Articolo a = (Articolo) cb.getTag();
    					a.setChecked(cb.isChecked());					
    				}
    			});	
    						
    			quanti.setOnFocusChangeListener(new OnFocusChangeListener() { 
    				
    				public void onFocusChange(View v, boolean hasFocus) {                    
                           
    						final int position = v.getId();                        
    						final EditText Quanti = (EditText) v;                        
    						a.setQuanti(Quanti.getText().toString());                   
    					              
    				}            
    			});
    			
    			
            } else {
            	// Because we use a ViewHolder, we avoid having to call
            	// findViewById().
            	ViewHolder viewHolder = (ViewHolder) convertView.getTag();
            	checkbox = viewHolder.getCheckBox();
            	codice = viewHolder.getCodice();
            	marca = viewHolder.getMarca();
            	prezzo = viewHolder.getPrezzo();
            	quanti = viewHolder.getQuantita();
            }
            
            // Tag the CheckBox with the Planet it is displaying, so that we can
         	// access the planet in onClick() when the CheckBox is toggled.
         	checkbox.setTag(a);
         	// Display planet data
         	checkbox.setChecked(a.isChecked());
         	codice.setText(a.getCodice()+" - "+a.getDesweb());
            marca.setText(a.getMarca()+" - "+a.getUnimis()+" - Ultima giac.:"+a.getQttgia());
            prezzo.setText(a.getPrezzo()+" € ");
            
            //Fill EditText with the value you have in data source            
    		quanti.setText(a.getQuanti());            
    
         	return convertView;
        }
        
        
        private class ViewHolder {
            public TextView codice;
            public TextView marca;
            public TextView prezzo;
            public EditText quantita;
            public CheckBox checkbox;
            
            public ViewHolder(){}
            
    		public ViewHolder(TextView codice, TextView marca, TextView prezzo, EditText quantita, CheckBox checkbox) {
    	        this.codice = codice;
    	        this.marca = marca;	        
    	        this.prezzo = prezzo;	
    	        this.quantita= quantita;
    	        this.checkbox = checkbox;
    	    }
    
    		public CheckBox getCheckBox() {
    			return checkbox;
    		}
    
    		public void setCheckBox(CheckBox checkBox) {
    			this.checkbox = checkBox;
    		}
    
    		public TextView getCodice() {
    	        return codice;
    	    }
    	    public void setCodice(TextView codice) {
    	        this.codice = codice;
    	    }
    	    
    	    public TextView getMarca() {
    	        return marca;
    	    }
    	    public void setMarca(TextView marca) {
    	        this.marca = marca;
    	    }
    	        
    	    public TextView getPrezzo() {
    	        return prezzo;
    	    }
    	    public void setPrezzo(TextView prezzo) {
    	        this.prezzo = prezzo;
    	    }
    	    
    	    public EditText getQuantita() {
    	        return quantita;
    	    }
    	    public void setQuantita(EditText quantita) {
    	        this.quantita = quantita;
    	    }
        }
    
    
    }

  2. #2

    Moderazione

    Le discussioni relative a Android non sono trattate qui, ma nella sezione Java.

    Provvedo a spostare il thread.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    509
    penso di aver risolto ma accetto volentieri commenti o ottimizzazioni.

    ho sostituito questa parte
    codice:
    quanti.setOnFocusChangeListener(new OnFocusChangeListener() { 				
    				public void onFocusChange(View v, boolean hasFocus) {     
    					if (!hasFocus){
    						EditText cb = (EditText) v;
    						Articolo a = (Articolo) cb.getTag();
    						a.setQuanti(cb.getText().toString());	
    					}
    				}            
    			});
    e aggiunto questo prima di quanti.setText(a.getQuanti());
    codice:
     quanti.setTag(a);

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.