我的 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