Autore Topic: Problema con listview a righe alternate con solo ultima riga attiva  (Letto 431 volte)

Offline vulneraria

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Play Store ID:
    Vulneraria
Ciao,

sto cercando da un po' di risolvere questo problema ma non ne vengo a capo.
devo fare una listview con due layout diffenti alternati a seconda della riga, inizialmente devo presentare solo una riga con un cronometro e la possibilita' di farlo partire, mettere in pausa oppure salvare la riga.
in caso di save devo inserire una seconda riga con layout diverso (ma stesse funzioni) e bloccare la prima, in caso di save devo inserire una terza riga con layout uguale alla prima etc.
in tutto questo solo l'ultima riga deve essere attiva, le altre non devono essere cliccabili.
 ecco il mio adapter, dove sbaglio?

Codice (Java): [Seleziona]
public class MyAdapter extends ArrayAdapter<Breastfeed> {
        int rowleft;
        int rowright;
        private final Context context;
        private List<Breastfeed> objects;

        public MyAdapter(Context context, int rowleft, int rowright, List<Breastfeed> objects) {
            super(context, rowleft,rowright, objects);
            this.rowleft = rowleft;
            this.rowright = rowright;
            this.context = context;
            this.objects = objects;
        }

        @Override
        public int getCount() {
            return objects.size();
        }

        @Override
        public Breastfeed getItem(int position) {
            return objects.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public boolean areAllItemsEnabled() {
            return false;
        }

        @Override
        public boolean isEnabled(int position) {
            return position >= (objects.size() - 1);
        }


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

            View row = convertView;
            UserHolder holder;

            final Breastfeed feeds = objects.get(position);
            if (row == null) {
                LayoutInflater inflater = ((android.app.Activity) context).getLayoutInflater();
                if (feeds.getBreast().equals("L")) {
                    row = inflater.inflate(rowleft, parent, false);
                } else {
                    row = inflater.inflate(rowright, parent, false);
                }
                holder = new UserHolder();
                holder.mChronometer = (Chronometer) row.findViewById(R.id.time);
                holder.start = (ImageButton) row.findViewById(R.id.start);
                holder.save = (ImageButton) row.findViewById(R.id.save);
                //se non sono attivi
                if (feeds.getLock().equals("Y")) {
                    holder.start.setFocusable(false);
                    holder.start.setClickable(false);
                    holder.save.setFocusable(false);
                    holder.save.setClickable(false);
                }
                row.setTag(holder);
            } else {

                holder = (UserHolder) row.getTag();

            }


            if (holder != null) {
                final UserHolder finalHolder = holder;
                holder.start.setOnClickListener(new View.OnClickListener() {

                    public void onClick(View v) {
                        if (running) {
                            finalHolder.mChronometer.stop();
                            long timeelapsed = finalHolder.mChronometer.getTimeElapsed();
                            time = (int) timeelapsed / 1000;
                            finalHolder.start.setImageResource(android.R.drawable.ic_media_play);
                            running = false;
                        }
                        else {
                            finalHolder.mChronometer.start();
                            finalHolder.start.setImageResource(android.R.drawable.ic_media_pause);
                            running = true;
                        }


                    }
                });
            }

            if (holder != null) {
                holder.save.setOnClickListener(new View.OnClickListener() {

                    public void onClick(View v) {
                        if (feeds.getBreast().equals("L")) {
                            feeds.setLock("Y");
                            listaActivity.remove(position);
                            Breastfeed feednow = new Breastfeed("L",time,"Y");
                            listaActivity.add(feednow);
                            Breastfeed feednext = new Breastfeed("R",0,"N");
                            listaActivity.add(feednext);
                        } else {
                            feeds.setLock("Y");
                            listaActivity.remove(position);
                            Breastfeed feednow = new Breastfeed("R",time,"Y");
                            listaActivity.add(feednow);
                            Breastfeed feednext = new Breastfeed("L",0,"N");
                            listaActivity.add(feednext);
                        }


                        notifyDataSetChanged();

                    }
                });
            }


            return row;
        }
    }

    static class UserHolder {
        Chronometer mChronometer;
        ImageButton start;
        ImageButton save;


    }
« Ultima modifica: 19 Marzo 2015, 13:30:45 CET da vulneraria »

Offline tonno16

  • Utente storico
  • *****
  • Post: 1187
  • Respect: +57
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Problema con listview a righe alternate con solo ultima riga attiva
« Risposta #1 il: 19 Marzo 2015, 13:09:46 CET »
0
Edita col tag code