无法在滚动之间切换 - 在ScrollView android中的listView

时间:2014-01-30 07:28:06

标签: android android-listview ontouchevent android-scrollview

我有一个带有scrollview的布局,里面是listview。 在触摸时,我希望能够在这两个滚动之间切换,但出于某种原因,当我在ScrollView中时,我无法将其切换到listView的内置滚动。

我尝试过使用这种方法(并且非常喜欢):http://technet.weblineindia.com/mobile/handle-scrollable-views-or-controls-in-another-scrollview-in-android/,但它无法在滚动之间切换。

所以,我尝试了另一种方法 - 我在布局上执行触摸事件,并且我在此布局上使用触摸事件并将触摸事件发送到特定项目(列表视图或滚动),但即使内部if是调用时,listView的ontouch没有被执行。

这是我的布局:

<ScrollView
    android:id="@+id/scroll_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true" >

    <LinearLayout
        android:id="@+id/pull_up_main_layout"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:orientation="vertical" >

        <LinearLayout
            android:id="@+id/pull_up_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:orientation="horizontal"
            android:visibility="visible" >

            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_margin="5dp"
                android:gravity="center"
                android:text="show layout"
                android:textSize="20sp" />
        </LinearLayout>

        <ListView
            android:id="@+id/scroll_list"
            android:layout_width="fill_parent"
            android:layout_height="match_parent" />
    </LinearLayout>
</ScrollView>

<RelativeLayout
    android:id="@+id/touch_interceptor"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</RelativeLayout>

和代码:

final ListView listView = (ListView) _view.findViewById(R.id.scroll_list);
final ScrollView mainScroll = (ScrollView) _view.findViewById(R.id.scroll_view);
final RelativeLayout touchInterceptor = (RelativeLayout) _view.findViewById(R.id.touch_interceptor);

touchInterceptor.setOnTouchListener(new OnTouchListener()
{
    float   lastY   = -1;

    @Override
    public boolean onTouch(View v, MotionEvent event)
    {
        //change 116 size to not a fixed size.
        if (lastY > event.getY() && mainScroll.getScrollY() == 116 && listView.getFirstVisiblePosition() == 0 && listView.getChildAt(0).getTop() <= 0)
        {
            //even though we arrive here, there's no change in the focus, and still, mainScroll is the chosen scroll.
            listView.onTouchEvent(event);
        }
        else
        {
            mainScroll.onTouchEvent(event);
        }

        lastY = event.getY();
        return true;
    }
});

0 个答案:

没有答案