好的,我要实现的目标是创建一个与Excel中“冻结窗格”效果相同的布局。也就是说,我想要一个标题行,它可以与主ListView水平滚动,以及一个左侧的ListView,该ListView可以与主ListView垂直滚动。在另一维度滚动时,标题行和左侧的ListView应保持不动。
这是xml布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/recordViewLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout android:layout_width="160dp"
android:layout_height="match_parent"
android:orientation="vertical">
<CheckBox
android:id="@+id/checkBoxTop"
android:text="Check All"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ListView android:id="@+id/engNameList"
android:layout_width="160dp"
android:layout_height="wrap_content"/>
</LinearLayout>
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout android:id="@+id/scroll"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<include layout="@layout/record_view_line" android:id="@+id/titleLine" />
<ListView
android:id="@android:id/list"
android:layout_height="wrap_content"
android:layout_width="match_parent"/>
</LinearLayout>
</HorizontalScrollView>
</LinearLayout>
我接着在ListActivity中使用了这段代码
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
View v = recordsListView.getChildAt(0);
int top = (v == null) ? 0 : v.getTop();
((ListView)findViewById(R.id.engNameList)).setSelectionFromTop(firstVisibleItem, top);
}
当用户滚动右侧 ListView 时,应该导致左侧 ListView 滚动。不幸的是它并没有这样做。
我在网上搜了一下,似乎 setSelectionFromTop() 函数不能用于嵌套在多个布局中的 ListView。
如果是这种情况,有人能建议一种使它们一起滚动的方法,或者一种不同的布局设置方式,或者完全不同的技术吗?