我目前正在尝试使用数据绑定设置点击侦听器到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
是我在动作类中定义的方法:
public void linearLayoutClicked(View view) {
// specific logic
}
我还尝试过将子视图和那些将clickable
和focusable
设置为false的子视图以及duplicateParentState
设置为true
和false
的子视图
该操作与正在正常工作的其他视图使用的操作完全相同。
这是一个错误还是我做错了?为什么这对LinearLayout
不起作用,但对其他观点没有任何问题?
答案 0 :(得分:4)
您可以处理如下所示的任何视图点击事件。希望它有所帮助!
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)如上所述,您可以通过数据绑定获得布局点击。希望它对你有用。
由于
快乐编码!!
答案 1 :(得分:0)
所以一切都设置正确,生成的绑定文件显示正确设置了点击侦听器,但是由于一些非常奇怪的原因,一半的绑定正在运行而新的绑定没有。较新的意思是LinearLayout
以及围绕它的所有尝试。
解决问题的原因是简单的缓存失效以及相应的重启和瞧,点击监听器在LinearLayout
上完美运行。只需记住将其设置为clickable
和focusable
,并将所有子视图设置为不可点击,这样他们就不会在父级之前使用该事件。
答案 2 :(得分:0)
如果Invalidate Cache不起作用。
然后从 Build> Rebuild 中进行 Rebuild 项目。修复错误(如果有),然后重新构建。