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>
プログラムで TableLayout に TableRows を入力します。
テーブルの上部に行を追加する必要がある場合があります (child(0) の前に挿入)。
そして問題は、ScrollView が跳ね上がることです。行挿入の前後に ScrollViewのScrollY()
位置
をログに記録したことがわかります。そして相変わらずです( !!)
これがジャンプの原因です。これがジャンプの原因です。これは、行 A にある前に行とスクロール位置 Y = 234 (たとえば) があり、同じ位置 Y が行 Q を意味するためです。
行 A は (たとえば) 5 行目で、挿入後は行 Q が 5 行目
です。ご覧のとおり、ScrollView の観点からは何も変わっていませんが、View には別の行が表示されています。
この時点で私の説明に完全に混乱していない場合は、画面に表示される内容を変更せずに上部に行を挿入する方法をアドバイスしてください。
言い換えれば、ユーザーが見るものに影響を与えることなく、挿入をステルスにしたいのです。
いくつかのコードが画像をクリアするのに役立つ場合、上部に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