滚动后,布局中的布局混乱

时间:2011-03-07 21:23:55

标签: android textview

我有一个带有自定义适配器的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,该怎么办?这是“重置”它需要的吗?

2 个答案:

答案 0 :(得分:1)

行视图在listView中重复使用。前十(我猜10或可能更少)第一次充气,并设置尺寸/重力等。当用户滚动到可见行下方时,顶行被回收并被送到下一个即将到来的行。因此,最上面一行的视图将重新用于下一个即将到来的行。如果您的第一行和下一个即将到来的行具有不同的行数,则会出现您所看到的行为。

解。在初始充气期间设置文本重力和行数,所有行都将具有相同的大小,而不管其中的行数。你不应再看到你观察到的波动。

有关详细信息http://android.amberfog.com/?p=296

,请参阅此说明

答案 1 :(得分:0)

解决方案是设置textView行数(如Veeresh所说),但不是在初始膨胀期间。

titleView.setLines(2);

不完全令人满意(如果我有n行怎么办?)考虑到textView的高度已经在布局文件中明确设置,它甚至没有意义。哦,好吧。