Autore Topic: ListView Adapter consera stato dati  (Letto 595 volte)

Offline brain2014

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
ListView Adapter consera stato dati
« il: 16 Gennaio 2014, 15:38:07 CET »
0
Salve a tutti, sono alla mia prima app, quindi vi chiedo anticipatamente scusa per le banalità che potrò chiedere.
Il problema è il seguente, una mia activity è formata da una listview con all'interno un EditText e un Button, spulciando un po' in giro su questo forum e nei vari tutorial ho utilizzato un adapter ad hoc (credevo!!!) il problema è sorto al momento dello scroll, ossia editText non conserva i dati inseriti e si ripresentano i vecchi dati che carico da un json. cercando su internet "EditText Loses content on scroll in listview" mi è apparso un articolo molto interessante "http://www.mindfiresolutions.com/Keeping-the-data-in-ListView-with-interactive-items-while-scrolling-in-Android-1621.php" (spero che si possa mettere un link). Seguendo questo articolo effettivamente nello scroll conservo i dati ma il problema ora sorge nel button ossia nell'operazione di onClick(View v)  in particolare

String pProgr = ((HolderView)view.getTag()).mioValore.getText().toString(); (ovviamente mioValore è un EditText della classe HoldeView)

implementato nell'adapter non riesco ad accedere alle informazioni del singolo Item ossia mi restiruisce un eccezione exceptionNullPointer
Cosa starò sbagliando, quando utilizzavo il vecchio adapter perdevo i dati dallo scroll ma accedevo al singolo Item.


Grazie in anticipo.

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:ListView Adapter consera stato dati
« Risposta #1 il: 16 Gennaio 2014, 15:45:58 CET »
0
Comincia a postare il tuo codice.
Tieni presente che la listView lavora con l'adapter (qualunque esso sia).
Questo significa che i dati vengono letti da lì, quindi devi sempre aggiornare l'adapter con i nuovi dati, e lanciare il notifydatasetchanged.


Offline brain2014

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
Re:ListView Adapter consera stato dati
« Risposta #2 il: 16 Gennaio 2014, 15:59:49 CET »
0
Grazie per la celerità della risposta posto adapter

Codice (Java): [Seleziona]
public class pAdapterPck extends ArrayAdapter<printDPack> {
 
        int resource;
    String response;
    Context context;
    private LayoutInflater inflater;
    ArrayList<info> arrayInfo = null;
    protected List<printDPack> items;
   
   


   
   
    //Initialize adapter
    public  pAdapterPck(Context context, int resource, List<printDPack> items) {
        super(context, resource, items);
               
        inflater = LayoutInflater.from(context);
        this.resource=resource;
        this.context = context;
        this.items = items;
                     
    }
   
   
     
    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
         View view = null;
         
                               
        if (convertView == null) {          
                   
                        LayoutInflater inflater = (LayoutInflater) getContext()  
                                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        view = inflater.inflate(R.layout.pck_deroga, null);      
                   
                        final HolderView viewHolder = new HolderView();            
                       
                              viewHolder.hValore = (EditText)view.findViewById(R.id.ItemvaloreAutorizzato);
                        viewHolder.hInfo = (Button)view.findViewById(R.id.ItemInfo);
                       
                        viewHolder.hValore.addTextChangedListener(new TextWatcher() {

                        public void onTextChanged(CharSequence s, int start,
                            int before, int count) {
                        printDPack element = (printDPack)viewHolder.hValore.getTag();
                        element.setValoreAutorizzato(s.toString());

                    }

                    public void beforeTextChanged(CharSequence s, int start,
                            int count, int after) {
                        // TODO Auto-generated method stub

                    }

                    public void afterTextChanged(Editable s) {
                                         
                       
                    }
                });
                                         

                        viewHolder.hValore.setTag(items.get(position));
                        view.setTag(viewHolder);        
                        }
                else {
                           view = convertView;
                           ((HolderView)view.getTag()).hValore.setTag(items.get(position));
                                                 
                        }
       
            final HolderView holder = (HolderView) view.getTag();
                   
            holder.hValore.setText(items.get(position).getValoreAutorizzato());
         
            holder.hInfo.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                        String pProgr = ((HolderView)view.getTag()).hValore.getText().toString();
                            // E qui il problema io vorrei prendere qualunque dato del Item potrei avere anche un campo TextView.
                                               
                }
            });
                       
                                       
      return view;
    }
   
    static class HolderView
    {
        EditText hValore;
        Button hInfo;
       
               
        }
   
 
    }




public class printDPck  implements Serializable {
   
       
    public String valoreAutorizzato;
         
    public String getValoreAutorizzato()
    {
        return this.valoreAutorizzato;
         
    }  
   
    public void setValoreAutorizzato(String text) {
                this.valoreAutorizzato = text;
        }

}
« Ultima modifica: 16 Gennaio 2014, 22:34:39 CET da GabMarioPower »