Android アプリに問題があり、これまでのところ解決策を思い付くことができませんでした。おそらく、私が見逃していることは明らかなので、誰かが私に良い解決策を提案できるかもしれません。
したがって、基本的には、水平レイアウトに 2 つの GridView を並べて配置します。左の GridView は 1 列で、右の GridView は画面に合わせて列数を動的に調整します。基本的に、左側の GridView は、右側の GridView のプログラムによって設定された行ヘッダー列です。設定された行数を持つテーブルを作成していますが、すべての列を水平にスクロールするのではなく (ユーザーがさらに追加できるため、列の数は不明です)、端に到達する必要があるため、このようにしました。画面を表示し、空白の行を作成してから、折り返して列を続けます。
今、私は 2 つの GridViews を持っており、スクロールとは別に、すべてが正確に機能しています。どちらかがスクロールされたときに、2 つの GridView を一緒に (またはできるだけ同じ時間に) スクロールしたいと考えています。期待どおりに動作しないスクロールのコードは次のとおりです。
mRightGrid.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
mLeftGrid.smoothScrollToPosition((firstVisibleItem / mRightGridColumns) + 1);
}
});
mLeftGrid.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
mLeftGrid.smoothScrollToPosition((firstVisibleItem * mRightGridColumns) + 1);
}
});
右のグリッドに 10 列があり、そのグリッドがスクロールされて、位置 30 (3 行目の最初のセル) が最初に表示されるアイテムになる場合、左のグリッドはその位置にスクロールする必要があることを意図していることは明らかです。 2 (30 / 10 - 1 = 2) は、左側のグリッド ビューの 3 行目のセルです。したがって、これは私が期待したようにまったく機能しません。グリッドが移動するたびにスクロールの実際のy位置を評価し、同じy位置を他のグリッドに適用する方法が実際にあるのだろうかと思います.実際に機能し、良好な同期スクロール結果が得られます。