我读了几个博客\ so \ forum帖子,看到将ListView放在ScrollView中显然存在问题。但是在某个地方我发现它应该可以工作,如果我在scrollview中放置一个线性布局(如列表),现在它将工作。下面是我的xml。 但列表不向上滚动,向下滚动,冻结...... 知道为什么吗?
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical" android:fillViewport="true">
<LinearLayout android:layout_width="fill_parent"
android:layout_height="fill_parent" android:orientation="vertical">
<LinearLayout android:layout_width="wrap_content"
android:layout_height="wrap_content" android:orientation="horizontal">
<ListView android:id="@+id/listView1" android:layout_width="100dp"
android:layout_height="wrap_content" android:background="@color/white"
android:cacheColorHint="#00000000" />
<HorizontalScrollView android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ListView android:id="@+id/listView2" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:background="@color/white"
android:cacheColorHint="#00000000" />
</HorizontalScrollView>
</LinearLayout>
</LinearLayout>
</ScrollView>
答案 0 :(得分:2)
首先,不应将ListView插入ScrollView。将ListView放在LinearLayout中允许您显示它,但ScrollView会播放所有垂直滚动事件,因此ListView永远不会收到任何触摸事件。
您可能想要使用ViewGroup.html#onInterceptTouchEvent(android.view.MotionEvent)。
答案 1 :(得分:0)
把它们放在里面
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
</LinearLayout>
答案 2 :(得分:0)
我修改了xml布局并修改了onScroll侦听器。它现在完美无缺。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="vertical">
<LinearLayout android:layout_width="fill_parent"
android:id="@+id/mainLayout" android:layout_height="wrap_content"
android:orientation="horizontal">
<ListView android:id="@+id/listView1" android:layout_width="100dp"
android:layout_height="wrap_content" android:background="@color/white"
android:cacheColorHint="#00000000" android:smoothScrollbar="true"
android:scrollbars="none" />
<HorizontalScrollView android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ListView android:id="@+id/listView2" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:background="@color/white"
android:cacheColorHint="#00000000" android:smoothScrollbar="true"
android:scrollbarStyle="outsideOverlay" />
</HorizontalScrollView>
</LinearLayout>
lv1.setOnScrollListener(new OnScrollListener() {
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
int index = firstVisibleItem;
View v = view.getChildAt(0);
int top = (null == v) ? 0 : v.getTop();
Log.i("lv1","index:"+index+" top:"+top);
lv1.setSelection(index);
lv2.setSelectionFromTop(index, top);
}
public void onScrollStateChanged(AbsListView view, int scrollState) {
String sState;
switch (scrollState) {
case OnScrollListener.SCROLL_STATE_FLING:
sState = "Fling";
break;
case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:
sState = "Touch Scroll";
break;
case OnScrollListener.SCROLL_STATE_IDLE:
sState = "Idle";
break;
default:
sState = "Unknown";
break;
}
}
});
答案 3 :(得分:0)
listview.setEnabled(false);
所以它会混淆跟随哪个滚动
yourScrollview.setNestedScrollingEnabled(false);
注意:如果您在同一活动中使用多个recyclerviews / listviews 您需要为所有recyclerviews / listviews
禁用滚动