Autore Topic: arrayadapter e aggiornamento valori  (Letto 562 volte)

Offline auron86

  • Nuovo arrivato
  • *
  • Post: 45
  • Respect: +1
    • Mostra profilo
arrayadapter e aggiornamento valori
« il: 20 Settembre 2013, 13:48:59 CEST »
0
salve ho qualche problema con le listview  e gli onclick di una textview

Codice (Java): [Seleziona]
ArrayAdapter<String> arrayAdapter =new ArrayAdapter<String>(InserimentoP3.this, R.layout.interessi_row, R.id.interessecb, listainteressi.getNomeInteressi()) {

                        @Override
                        public View getView(int position, View convertView, ViewGroup parent) {
                                View view = super.getView(position, convertView, parent);

                                TextView bottoneInteresse = (TextView) view.findViewById(R.id.interessecb);
                                //Map<String, String> data = (Map<String, String>) getItem(position);

                                bottoneInteresse.setTag(position);

                                if (listainteressi.getInteressi().get(position).getSelected() == 0) {
                                        bottoneInteresse.setBackgroundColor(Color.WHITE);
                                }

                                if (listainteressi.getInteressi().get(position).getSelected() == 1) {
                                        bottoneInteresse.setBackgroundColor(Color.BLACK);
                                }
                               
                                bottoneInteresse.setOnClickListener(new View.OnClickListener() {

                                        public void onClick(View v) {

                                                TextView cb = (TextView) v;
                                                int pressione = Integer.parseInt("" + cb.getTag());
                                                Log.i("aaaa",listainteressi.getInteressi().get(pressione).getSelected()+"");
                                               
                                                if (listainteressi.getInteressi().get(pressione).getSelected() == 0) {
                                                        listainteressi.getInteressi().get(pressione).setSelected(1);
                                                        cb.setBackgroundColor(Color.BLACK);
                                                       
                                                }

                                                if (listainteressi.getInteressi().get(pressione).getSelected() == 1) {
                                                        listainteressi.getInteressi().get(pressione).setSelected(0);
                                                        cb.setBackgroundColor(Color.WHITE);
                                                }
                                        }
                                });

                                return view;
                        }
                };
                ((ListView) findViewById(R.id.listviewinteressi)).setAdapter(arrayAdapter);
        }

classe interesse
Codice (Java): [Seleziona]
public class Interesse {
        private  String label;
        private  String id;
        private  int selected;
        private  int rootcategoria;

       
        public Interesse(String label, String id, int selected,int rootcategoria) {
                this.label = label;
                this.id = id;
                this.selected = selected;
                this.rootcategoria = rootcategoria;
        }


        public int getSelected() {
                return selected;
        }


        public void setSelected(int selected) {
                this.selected = selected;
        }


        public int getRootcategoria() {
                return rootcategoria;
        }


        public void setRootcategoria(int rootcategoria) {
                this.rootcategoria = rootcategoria;
        }


        public String getLabel() {
                return label;
        }


        public String getId() {
                return id;
        }
}

array di interessi

Codice (Java): [Seleziona]
[code=java]

public class ArrayInteressi {
       
        private  ArrayList <Interesse> interessi =new ArrayList <Interesse>();
        private ArrayList <String> nomeInteressi =new ArrayList <String>();

        public ArrayList<Interesse> getInteressi() {
                return interessi;
        }

        public void setInteressi(Interesse interesse) {
                this.interessi.add(interesse);
                this.nomeInteressi.add(interesse.getLabel());
        }
       
        public  ArrayList<String> getNomeInteressi() {
                return nomeInteressi;
        }

        public void clearInteressi(){
                this.interessi.clear();
                this.nomeInteressi.clear();
        }
       
}

riempio la l'Arraylist, prima di chiamare la listview con un asynctask


successivamente nel oNPost di questo invoco il metodo che mi crea la listview (e tutto funziona correttamente)



successivamente alla pressione del click della textview vorrei modificare un valore "int selected", presente nella classe interesse, cosa che in teoria avviene, ma quando provo nuovamente a leggere il valore , questo non risulta aggiornato, e come se i cambiamenti siano temporanei.



help

Offline elfo83

  • Utente normale
  • ***
  • Post: 287
  • Respect: +23
    • Mostra profilo
  • Sistema operativo:
    Mac OS 10.8.2
Re:arrayadapter e aggiornamento valori
« Risposta #1 il: 20 Settembre 2013, 14:25:34 CEST »
0
Secondo me dovresti capire e rivedere come funziona un array adapter. Ti posto un esempio del mio codice..
Questo è il mio adapter. Nel mio caso ho un'arraylist di JSONObject ma potrei avere un array list che contiene qualsiasi tipo di dato.
Codice (Java): [Seleziona]
private class ListAdapterFollowers extends ArrayAdapter<JSONObject>  {
               
                 
                 
                 public ImgLoader imageLoader;
             private ArrayList<JSONObject> items;
             
             
             public ListAdapterFollowers(Context context, int textViewResourceId, ArrayList<JSONObject> items) {
           super(context, textViewResourceId, items);
           this.items = items;
           
           imageLoader=new ImgLoader(getApplicationContext());
           
   
            }
           
         
         
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
         
                WrapperViewFollowersOrFollowing wrap=null;
                View v = convertView;
               
           if (v==null)
           {
                LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        v = vi.inflate(R.layout.friendslistcell, null);
                        wrap=new WrapperViewFollowersOrFollowing(v);
                        v.setTag(wrap);
       
           }
           
           try
                        {
                JSONObject o = items.get(position);
                        if (o != null)
                        {
                                wrap=(WrapperViewFollowersOrFollowing)v.getTag();
                                wrap.getProfileName().setText(o.getString("Username").trim());
                                                                               
                                String URL = o.getString("Image");
                                if(URL!=null && URL!="")
                                                imageLoader.DisplayImage(URL,  wrap.getProfileImg().get(),true);
                               
                                final int status=o.getInt("Unfollowed");
                               
                                final String userId=o.getString("UserId");
                                final int idx=position;
                                final ImageView isFoll = wrap.getIsFollower().get();

                                if(status==0)
                                        isFoll.setImageResource(R.drawable.unfollow);
                                else
                                        isFoll.setImageResource(R.drawable.follow);
         
                                isFoll.setOnClickListener(new OnClickListener(){

                                                @Override
                                                public void onClick(View v) {
                                                        switchImages(isFoll,userId,status,idx);
                                                }
                                       
                                });
                               
                                wrap.getIsFollower().get().setVisibility(View.VISIBLE);
                               
                               
                        }                      
         }
         
          catch(Exception e)
          {}

           return v;
            }

Questa è la classe wrapper. Ho una variabile che di solito non si usa, context, ma mi serve per creare le softreference.

Codice (Java): [Seleziona]
private class WrapperViewFollowersOrFollowing
        {
                private View base;
                private Context context;
                private SoftReference<ImageView> profileImg=null;
                private TextView profileName=null;
                private SoftReference<ImageView> isFollow=null;
               
               
                public WrapperViewFollowersOrFollowing(View base)
                {
                        this.base=base;
                        this.context=getApplicationContext();
                }
               
                private SoftReference<ImageView> getProfileImg()
                {
                        if(profileImg==null)
                        {
                                ImageView result = new ImageView(context);
                                result=(ImageView)base.findViewById(R.id.friendlistcell_profileimg);
                                profileImg=new SoftReference<ImageView>(result);
                               
                        }
                        return profileImg;
                       
                }
               
                private TextView getProfileName()
                {
                        if(profileName==null)
                        {
                                profileName=(TextView)base.findViewById(R.id.friendlistcell_profilename);
                        }
                        return profileName;
                       
                }
               
                private SoftReference<ImageView> getIsFollower()
                {
                        if(isFollow==null)
                        {
                                ImageView result = new ImageView(context);

                                result=(ImageView)base.findViewById(R.id.friendlistcell_follunfollbtn);
                                isFollow=new SoftReference<ImageView>(result);
                        }
                        return isFollow;
                       
                }
               
               
        }
       

per usare il tutto:
Codice (Java): [Seleziona]
                                ListAdapterFollowers laf= new ListAdapterFollowing(getApplicationContext(),R.layout.friendslistcell,follSearch);dove friendlistcell è il layout di una cella dela listview mentre follSearch è l'arraylist che contiene gli JSONObject. Prova a modificare il tuo codice secondo questo esempio e rimetti l'onclick listener all'interno del metodo getView dell'adapter.