0

我的 UI 中有以下结构

    <ScrollView
        android:id="@+id/vscroll"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TableLayout
            android:id="@+id/table"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" >
        </TableLayout>

    </ScrollView>

我以编程方式用 TableRows 填充 TableLayout。

有时我需要在表格顶部添加行(在 child(0) 之前插入)。
问题是 ScrollView 跳起来了。
我可以告诉你,我在插入行之前和之后记录了 ScrollView 的ScrollY()位置。它保持不变(!!)

这就是导致跳转的原因,因为现在我有更多行并且滚动位置 Y= 234(例如)之前在 A 行上,现在相同的位置 Y 表示 Q 行。

行 A 是(比如说)第五行,现在插入行 Q 之后是第五行
所以你看,从 ScrollView 的角度来看,没有任何变化,但视图现在显示了不同的行。

如果此时您对我的解释并不完全感到困惑,那么也许您可以建议我如何在顶部插入行而不改变我在屏幕上看到的内容。
换句话说,我希望插入隐身而不影响用户看到的内容。

如果某些代码有助于清除图片,这是我在顶部插入 5 行的方法

table = (TableLayout) findViewById(R.id.table);
TableRow.LayoutParams params = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.WRAP_CONTENT);
for(int i=0; i<5 ; i++) {   
    TableRow mr = new TableRow(getContext());
    // some stuff to set the row texts
    table.addView(mr, 0, params);
}

Before Insertion    After Insertion
Row 0               New Row 0
Row 1               New Row 1
Row 2               New Row 2
Row 3               New Row 3        <--- vscroll Y position stays the same
Row 4               New Row 4
Row 5               Old Row 0
Row 6               Old Row 1
Row 7               Old Row 2
Row 8               Old Row 3        (vscroll jumps up from here to new Row 3)
Row 9               Old Row 4
Row 10              Old Row 5
Row 11              Old Row 6
4

1 回答 1

1

我还没有测试它,但你可以尝试post()一个Runnable你会得到新插入的行的高度的地方,然后滚动ScrollView那个量,使它保持在相同的位置:

final TableRow newRow = new TableRow(this);
        // add stuff to the row     
        tl.addView(newRow, 0, params);
        // sv is your ScrollView vscroll
        sv.post(new Runnable() {

            @Override
            public void run() {             
                int size = newRow.getHeight();              
                sv.scrollBy(0, size);
            }

        });
于 2012-06-07T06:21:17.223 回答