我目前正在尝试使用数据绑定在LinearLayout
布局文件中设置一个点击监听器到.xml
视图。
我已经设法让它在其他视图上运行得很好,比如Button
或TextView
,但由于某种原因它不能与LinearLayout
一起使用。
这是我的尝试的骨头,我仍然无法让它工作:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="72dp"
android:clickable="true"
android:focusable="true"
android:onClick="@{action::linearLayoutClicked}"
android:orientation="vertical">
</LinearLayout>
其中linearLayoutClicked
是我在action类中定义的方法:
public void linearLayoutClicked(View view) {
// specific logic
}
我也试过了孩子的观点和那些clickable
和focusable
设置为false的孩子观点,以及duplicateParentState
设置为true
和false
。
该操作与正在正常工作的其他视图上使用的操作完全相同。
这是一个错误还是我做错了?为什么这对LinearLayout
不起作用,但对其他观点没有任何问题?
您可以处理任何视图点击事件,如下所示。希望能帮助到你!
1)为下面的句柄点击事件创建界面。
interface OnClickHandlerInterface {
void onClick(View view)
}
2)在动作类中实现click侦听器,如下所示
class MainActivity implements OnClickHanderInterface{
@Override
void OnClick(View view){
}
}
3)现在将此接口绑定在XML文件中。
<data>
<variable
name="clickHandler"
type=".OnClickHandlerInterface" />
</data>
4)现在使用绑定对象在操作类中注册此接口
mActivityMainBinding.clickHandler = this
5)现在设置onClick任何你想要设置的点击监听器。对你而言,它是LinearLayout
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="72dp"
android:clickable="true"
android:focusable="true"
android:onClick="@{(v)-> clickHandler.onClick(v)}"
android:orientation="vertical">
</LinearLayout>
6)现在,当你点击linearLayout时,你可以点击你可以点击动作类中实现的界面。
@Override
void OnClick(View view){
switch(view.getId()){
case R.id.linearLayout:
// Handler click and do some actions
break;
}
}
6)如上所述,您可以通过数据绑定获得布局点击。希望它能为你效劳。
谢谢
快乐编码!!
所以一切都设置正确,生成的绑定文件显示正确设置了点击侦听器,但是由于一些非常奇怪的原因,一半的绑定正在工作而新的绑定没有。更新的意思是LinearLayout
和围绕它的所有尝试。
解决问题的原因是简单的缓存失效和相应的重启和瞧,点击监听器在LinearLayout
上完美运行。只需记住将它设置为clickable
和focusable
,并将任何子视图设置为不可点击,这样它们就不会在父项之前消耗该事件。
围绕这一天整整3天,在评论中花了不到10分钟与其他人讨论,记住试图使Android Studio的缓存无效,令我难以置信......
如果无效缓存不起作用。
然后从Build> Rebuild重建项目。修复错误,如果有的话再重建一次。