具有子视图的viewgroup上的onclicklistener

时间:2017-12-17 11:31:06

标签: android onclicklistener

我有一个我想要进行tappable的相对布局,包括它的子视图。

<RelativeLayout
    android:id="@+id/houses_rel_1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="10dp"
    android:background="@drawable/white_grey_border_bottom">

    <HorizontalScrollView
        android:id="@+id/houses_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:duplicateParentState="true"
        android:scrollbars="none">

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            ...
        </LinearLayout>
    </HorizontalScrollView>

    <TextView... />
    .....
</RelativeLayout>

layout

我想在相对布局,水平视图和textview上设置一个onclicklistener,并在图标上设置一个单独的onclicklistener。

@BindView(R.id.houses_rel_1)
ViewGroup mHouse;

@BindView(R.id.fav_icn_1)
ImageView mFavIcn;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_house_list);
    ButterKnife.bind(this);

    mHouse.setOnClickListener(new ViewGroup.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(mContext, SomeActivity.class);
            mContext.startActivity(intent);
        }
    });
    mFavIcn.setOnClickListener(new View.OnClickListener() {
        ...
    });
}

目前,新活动仅在我点击textview时才会开始,但当我点击horizontalscrollview时没有任何反应。我是否必须将onclicklistener复制到horizontalscrollview

2 个答案:

答案 0 :(得分:1)

尝试分组onClick of Butter Knife:

@OnClick({ R.id.houses_1, R.id.houses_rel_1 })
public void startSomeActivity() {
   Intent intent = new Intent(mContext, SomeActivity.class);
        mContext.startActivity(intent);
}

答案 1 :(得分:1)

请使用setOnTouchListener()上的horizontalScrollView代替setOnClickListener()

嗯......原因很复杂。在我阅读HorizontalScrollView.java的源代码后,我发现它覆盖了ViewViewGroup - onTouchEventonInterceptTouchEvent的这些方法。不使用{{1} },super.onTouchEvent。部分意味着如果你在它上面设置一个OnClickListener(super.onInterceptTouchEvent),就永远不会调用HorizontalScrollView事件。

如果您想了解更多信息,也可以阅读源代码。然后我告诉你原因会更有帮助,因为我在阅读时可能会有一些误解。

我希望能帮助你。