Obecná diskuze o vývojiGridview mění více položek

Moderátoři: mArtinko5MB, mArtinko5MB

Odpovědět
Tomickck
Stálý androiďák
Příspěvky: 105
Registrován: úte 27. led 2015 15:38:07
Typ mobilu / ROM: Samsung GALAXY S4

Gridview mění více položek

Příspěvek od Tomickck »

Zdravím, už si opravdu nevím rady a doufám, že odpověď najdu zde.
Mám gridview, který jsem dělal podle návodu, co jsem našel na internetu:

Kód: Vybrat vše

public class CustomGrid extends ArrayAdapter<MuserObject> implements View.OnClickListener {

    private ArrayList<MuserObject> musers;
    Context context;

    private static class ViewHolder {
        GridViewItem image, image2;
    }

    public CustomGrid(ArrayList<MuserObject> musers, Context context) {
        super(context, R.layout.grid_single, musers);
        this.musers = musers;
        this.context = context;

    }

    @Override
    public void onClick(View v) {
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return musers.size();
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        final MuserObject muser = getItem(position);
        final CustomGrid.ViewHolder viewHolder;

        if (convertView == null) {

             viewHolder = new CustomGrid.ViewHolder();
            final LayoutInflater inflater = LayoutInflater.from(getContext());
            convertView = inflater.inflate(R.layout.grid_single, parent, false);
            viewHolder.image = convertView.findViewById(R.id.image);
            viewHolder.image2 =  convertView.findViewById(R.id.image2);

            convertView.setTag(viewHolder);
        } else {
            viewHolder = (CustomGrid.ViewHolder) convertView.getTag();
        }



        Picasso.get().load(muser.getImage()).into(viewHolder.image);

        // Change to green background
        if (muser.isDone()) {
            viewHolder.image2.setBackgroundColor(Color.parseColor("#ff669900"));
        }

        return convertView;
    }
}
Na jednom z posledních řádků můžete vidět, že mám jednoduchou podmínku, co zjistí, jestli bylo políčko uhodnuto, pokud ano, tak se nastaví barva popředí. To funguje dobře, problém je v tom, že se mi ta barva mění na více místech:
Obrázek
Takto to vypadá normálně
Obrázek
A takhle když pouze u prvního itemu změním done na true

a třeba u 2,3,4 položky je to vpohodě, jen když dám true na předposlední, tak se mi vybarví zase ta první :facepalm:
Budu moc rád za jakoukoliv radu, pokud bude potřeba ukázat víc kódu, hned ho napostuju.
Moc vám děkuji za rady.
Uživatelský avatar
Crusty
Robot
Příspěvky: 938
Registrován: ned 19. črc 2009 17:30:40
Typ mobilu / ROM: Redmi Note 9 Pro
Bydliště: Praha
Kontaktovat uživatele:

Re: Gridview mění více položek

Příspěvek od Crusty »

GridView jednotlive polozky recykluje, znovu pouzije.
takze tu podmiku udelej, ze kdyz je to OK, obarvi barvou a jinak nastav zase zpet zakladni barvu, nebo pruhlednost.
Navic by jsi toto mel resit spise v onBind() ... v getView by jsi jen mel vratit view ktere se pak prave znovu pouziva
Respektive pouzit RecyclerView https://developer.android.com/guide/top ... cyclerview
lazy
Androiďák!
Příspěvky: 530
Registrován: pon 04. úno 2013 12:45:07
Typ mobilu / ROM: S10e

Re: Gridview mění více položek

Příspěvek od lazy »

Jo oni se recyklujou tak u nich musis vsechno nastavit znovu vcetne barvy pozadi.
Odpovědět

Zpět na „Obecná diskuze o vývoji“