listview recykling dziwnej pustej przestrzeni
Mam podobny problem do tego w tym pytaniu:ListView i problem z odzyskiwaniem wierszy
Powyżej zostało rozwiązane. ale to samo rozwiązanie nie działa dla mnie.
Mam widok listy składający się z tekstów. Każdy widok tekstowy może zawierać zmienną liczbę obrazów. Otrzymuję obrazy z html.imagegetter i używam recyklingu w metodzie getview adaptera listy.
Jeśli w widoku tekstowym znajduje się jeden lub więcej obrazów, będzie on miał wysokość umożliwiającą dopasowanie jego zawartości. Gdy ten widok tekstowy zostanie poddany recyklingowi, a nowa zawartość nie wypełni zdefiniowanej wcześniej wysokości, pojawi się puste miejsce.
Problem polega na tym, że nie mogę przywrócić wysokości textview w getview, ponieważ nie wiem, jaką wysokość będzie miał następny element listy.
to jest mój widok:
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
View rowView = convertView;
if (rowView == null) {
LayoutInflater inflater = context.getLayoutInflater();
rowView = inflater.inflate(resource, parent, false);
holder = new ViewHolder();
holder.imgAvatar = (ImageView) rowView.findViewById(R.id.imgAvatar);
holder.textDetails = (TextView) rowView.findViewById(R.id.textDetails);
holder.textPostTime = (TextView) rowView.findViewById(R.id.textPostTime);
holder.textPost = (TextView) rowView.findViewById(R.id.textPost);
rowView.setTag(holder);
} else {
holder = (ViewHolder) rowView.getTag();
}
holder.textDetails.setText(details.toString());
holder.textPostTime.setText(x.postTime);
holder.textPost.setText(Html.fromHtml(x.postBody, new URLImageGetter(holder.textPost, context), null, context));
return rowView;
}
jest to układ wierszy:
<TextView
android:ellipsize="none"
android:autoLink="web"
android:textColor="#000000"
android:id="@+id/textPost"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
PROBLEM: Mechanizm recyklingu listview nie może obliczyć nowej wysokości używanych widoków zgodnie z nową zawartością. Bez recyklingu jest zbyt wolny.