Hirdetés

Keresés

Új hozzászólás Aktív témák

  • WonderCSabo

    félisten

    válasz #39560925 #3214 üzenetére

    Bocs, nem ismerem a use-caset, igazad van, nem kéne így tanácsot adnom ezzel kapcsolatban.

    Két dolgot tehetsz:

    * custom Preference osztály, amiben megírod, hogy benne legyen a Facebook button, majd a preferences.xml fájlba berakod
    * nem rakod be az xml-be, hanem addPreferencesFromResorce hívása után kódban hozzáadod a VIew-t.

    Az első megoldás sztem sokkal szebb.

  • Karma

    félisten

    válasz #39560925 #3214 üzenetére

    Azért sípol, mert nem használod ki a ListView újrahasznosító mechanizmusát, hanem folyamatosan új Viewkat fújatsz fel. Feltételezem, a warning buborék két findViewById hívást takar.

    A tökéletes megoldásnak két lépése van, ebből az első a kritikus.

    1) Használd a convertView paramétert! Ha nem null, akkor az egy olyan cella, ami kicsúszott a képből és így nincs rá szükség. Ebben az esetben az új cella létrehozása teljesen felesleges, ezt a viewt kellene bekonfigurálnod az új adatokhoz, megspórolva a példányosítást és a GC-zést.

    View rowView = convertView != null
    ? convertView
    : LayoutInflater.from(parent.getContext()).inflate(R.layout.exc_row_layout, parent, false);

    2) A ViewHolder minta ehhez képest már apróság, a findViewById hívásokat lehet megspórolni vele. Egy olyan custom classról van szó, aminek tagváltozóiba elteszed a TextViewk referenciáit (tehát gyártott viewnként egyszer kell keresni), a holdert pedig beállítod Tagként a cellán. Ha a convertView nem null, akkor elkéred a tagből a holdert, és azonnal írhatod az új adatokat.

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    RowViewHolder viewHolder;

    if (convertView == null) {
    convertView = ... inflate ...;
    viewHolder = new RowViewHolder(convertView);
    convertView.setTag(viewHolder);
    } else {
    viewHolder = (RowViewHolder)convertView.getTag();
    }

    ... values tömb ...

    viewHolder.bindRow(values[position]);
    return convertView;
    }

    ... valahol lejjebb ...

    private static class RowViewHolder {
    private TextView nameView;
    private TextView descView;

    public RowViewHolder(View rowView) {
    nameView = rowView.findViewById(...);
    descView = rowView.findViewById(...);
    }

    public void bindRow(Exception model) {
    nameView.setText(model.getName());
    descView.setText(model.getDescription());
    }
    }

Új hozzászólás Aktív témák