我有一个带有自定义适配器的ListView,它可以创建包含TextView的行,这些行可能有1行或2行文本。
news_row.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
<TextView android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="48dip"
android:padding="6dp"
android:textSize="14sp">
</TextView>
</LinearLayout>
适配器:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.news_row, null);
}
else {
TextView titleView = (TextView)convertView.findViewById(R.id.text);
System.out.println(titleView.getText() + " to **" +
stories.get(position).title);
}
TextView titleView = (TextView)convertView.findViewById(R.id.text);
titleView.setText(stories.get(position).title);
titleView.setGravity(Gravity.CENTER_VERTICAL);
return convertView;
}
滚动后,一些单行TextViews显示为与行顶部对齐,并且一些2行TextViews位于行的底部。当最初包含2行TextView的行被赋予单行文本时,似乎会出现问题,反之亦然。
我原以为在getView中设置Gravity会解决这个行回收问题,但它必须是别的东西。如果每次回收行时以编程方式创建TextView,该怎么办?这是“重置”它需要的吗?
答案 0 :(得分:1)
行视图在listView中重复使用。前十(我猜10或可能更少)第一次充气,并设置尺寸/重力等。当用户滚动到可见行下方时,顶行被回收并被送到下一个即将到来的行。因此,最上面一行的视图将重新用于下一个即将到来的行。如果您的第一行和下一个即将到来的行具有不同的行数,则会出现您所看到的行为。
解。在初始充气期间设置文本重力和行数,所有行都将具有相同的大小,而不管其中的行数。你不应再看到你观察到的波动。
,请参阅此说明答案 1 :(得分:0)
解决方案是设置textView行数(如Veeresh所说),但不是在初始膨胀期间。
titleView.setLines(2);
不完全令人满意(如果我有n
行怎么办?)考虑到textView的高度已经在布局文件中明确设置,它甚至没有意义。哦,好吧。