我有一个相对布局,我想要进行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>
我想在相对布局,水平视图和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
s时,新活动才会盯着,但是当我点击horizontalscrollview
时没有任何反应。我是否必须将onclicklistener复制到horizontalscrollview
?
请在setOnTouchListener()
上使用horizontalScrollView
而不是setOnClickListener()
。
嗯......原因很复杂。在我阅读了HorizontalScrollView.java
的源代码之后,我发现它覆盖了View
或ViewGroup
的这些方法 - onTouchEvent
,onInterceptTouchEvent
。没有使用super.onTouchEvent
,super.onInterceptTouchEvent
。部分意味着如果你在它上面设置一个OnClickListener(HorizontalScrollView
),onClick
事件将永远不会被调用。
如果您想了解更多信息,也可以阅读源代码。然后我告诉你原因会更有帮助,因为我在阅读时可能会有一些误解。
我希望能帮助你。
尝试分组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);
}