ヘッダーと呼ばれる別のビューの上にオーバーレイされた ListView があります。このヘッダーは、さまざまな高さにすることができます。
ListView のデータセットで、空白の行を挿入し、プログラムでこの行の高さをヘッダー ビューの高さに設定します。このように、ListView が読み込まれると、位置 1 の行 (データの実際の最初の行) がヘッダーの下部に配置されます。これを行うのは、ヘッダー ビューを部分的に透明に設定できるようにするためです。ユーザーがスクロールすると、データの行がヘッダー ビューの透明度と混ざり合って表示されます。
これで、このリストに移動して特定の行を選択できるユース ケースが 1 つあります。私が行ったことは、位置 X で setSelection を呼び出すことです。これにより、ListView が自動的にスクロールされ、行 X の上部がリストの上部に表示されます。ただし、ヘッダー ビューではまだこれがわかりにくくなっています。これを補うために、scrollTo を呼び出します。これらの 2 つの部分は、次のようなものです。
listView.setSelection(selectedRowPosition);
if(hasHeadersEnabled()) {
listView.scrollTo(-headerView.getMeasuredHeight).
}
これらのコード行を呼び出すと、ListView は期待どおりに表示されます。選択した行の上部は、私の HeaderView の下部にあります。私が遭遇する問題は、ユーザーが ListView に触れるとすぐにスクロール位置がジャンプして、選択した行の上部が ListView の真の上部 (ヘッダー ビューの上部) になることです。
私の質問は、ListView で SelectedRow を設定した後、スクロールのために onTouch イベントを消費し始めたときに、ListView は常にその行の上部が ListView の上部になることを期待していますか? このコードでやりたいことを達成する別の方法はありますか? scrollTo と scrollBy を試しましたが、どちらも同じ効果があります。