具有子视图的viewgroup上的onclicklistener

问题描述 投票:1回答:2

我有一个相对布局,我想要进行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() {
        ...
    });
}

目前,只有当我点击textviews时,新活动才会盯着,但是当我点击horizontalscrollview时没有任何反应。我是否必须将onclicklistener复制到horizontalscrollview

android onclicklistener
2个回答
1
投票

请在setOnTouchListener()上使用horizontalScrollView而不是setOnClickListener()

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

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

我希望能帮助你。


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);
}
© www.soinside.com 2019 - 2024. All rights reserved.