您的位置:首页 > 其它

NestedScrollView onClick事件不能正常工作

2017-04-27 16:18 369 查看
问 题

我用NestedScrollView与CoordinatorLayout,使滚动动画工具栏。(由应用程序:layout_scrollFlags =“滚动| enterAlways”)

NestedScrollView包含的LinearLayout作为根的孩子,我把2 TextViews到LinearLayout中,使展开/折叠动画。一个设置可见 而另一个被设置为不见了。而通过的LinearLayout的onClick事件切换的知名度。

通常情况下,一切都按预期方式工作,但是当我滚动的NestedScrollView onClick事件不能正常工作。我需要滚动后双击即可得到展开/折叠动画

有没有人有同样的问题我吗?请帮我
< android.support.design.widget.CoordinatorLayout的xmlns:机器人=“htt​​p://schemas.android.com/apk/res/android”
的xmlns:程序=“htt​​p://schemas.android.com/apk/res-auto”
机器人:layout_width =“match_parent”
机器人:layout_height =“match_parent”>

< android.support.v4.widget.NestedScrollView
    机器人:layout_width =“match_parent”
    机器人:layout_height =“match_parent”
    应用程序:layout_behavior =“@字符串/ appbar_scrolling_view_behavior”>

    <的LinearLayout
        机器人:layout_width =“match_parent”
        机器人:layout_height =“match_parent”
        机器人:方向=“垂直”
        机器人:paddingBottom会=“98dp”
        机器人:以下属性来=“24dp”
        机器人:paddingRight =“24dp”>

        < android.support.v7.widget.AppCompatTextView
            机器人:ID =“@ + ID / detail_expense_reason_trim”
            机器人:layout_width =“match_parent”
            机器人:layout_height =“WRAP_CONTENT”
            机器人:单线=“假”
            机器人:文字颜色=“@色/ add_new_expense_text_color”/>

        < android.support.v7.widget.AppCompatTextView
            机器人:ID =“@ + ID / detail_expense_reason”
            机器人:layout_width =“match_parent”
            机器人:layout_height =“WRAP_CONTENT”
            机器人:单线=“假”
            机器人:文字颜色=“@色/ add_new_expense_text_color”
            机器人:能见度=“水涨船高”/>
    < / LinearLayout中>

< /android.support.v4.widget.NestedScrollView>

< android.support.design.widget.AppBarLayout
    机器人:layout_width =“match_parent”
    机器人:layout_height =“WRAP_CONTENT”>

    < android.support.v7.widget.Toolbar
        机器人:ID =“@ + ID / detail_expense_toolbar”
        机器人:layout_width =“match_parent”
        机器人:layout_height =“?ATTR / actionBarSize”
        机器人:主题=“@风格/ ThemeOverlay.AppCompat.Dark.ActionBar”
        应用程序:layout_scrollFlags =“滚动| enterAlways”
        应用程序:popupTheme =“@风格/ ThemeOverlay.AppCompat.Light”/>
< /android.support.design.widget.AppBarLayout>


@InjectView(R.id.detail_expense_reason)
AppCompatTextView originalReason;

@InjectView(R.id.detail_expense_reason_trim)
AppCompatTextView trimReason;

@InjectView(R.id.detail_expense_container)
的LinearLayout expenseContainer;


//处理事件
公共无效的onClick(){
    如果(originalReason.getVisibility()== View.VISIBLE){
        originalReason.setVisibility(View.GONE);
        trimReason.setVisibility(View.VISIBLE);
    } 其他 {
        originalReason.setVisibility(View.VISIBLE);
        trimReason.setVisibility(View.GONE);
    }

}


解决方案

这是NestedScrollView的一个bug,该bug的详细信息可以在这里找到:的问题。问题是,
mScroller.isFinished()在 onInterceptTouchEvent(MotionEvent EV)将不会返回真正的后一扔操作(即使一扔已停止)。因此,触摸事件截获。

这个错误已经报道了一段时间,但仍然没有得到解决。所以我通过自己的版本的bug修复这个问题产生。我实现了我自己的 NestedScrollView ,复制所有的code从 NestedScrollView ,并具有与如下修改:
公共类NestedScrollView扩展的FrameLayout实现NestedScrollingParent,NestedScrollingChild {
    ...
    私人无效initScrollView(){
        ...
        //替换这行:
        // mScroller =新ScrollerCompat(的getContext(),NULL);
        mScroller = ScrollerCompat.create(的getContext(),NULL);
        ...
    }

    @覆盖
    公共布尔onInterceptTouchEvent(MotionEvent EV){
        ...
        开关(行动及放大器; MotionEventCompat.ACTION_MASK){
            ...
            案例MotionEvent.ACTION_DOWN:{
                ...
                //替换这行:
                // mIsBeingDragged = mScroller.isFinished()!;
                mIsBeingDragged = FALSE;
                ...
            }
        }
    }
}


和本 NestedScrollView 应具有相同的行为与原来的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: