使用 android 数据绑定的按钮单击方法调用(已在片段中定义)不起作用。?

Method call (that has been defined in fragment) on button click using android data binding in not working.?

我想在布局 xml 文件中使用 android 绑定来调用 onButtonclick(View v)

在这种情况下,如何使用 android 绑定实现按钮 click? 我按照以下步骤进行操作,但没有用。有什么建议么 ?提前致谢。

Layout1.xml

<data>
    <variable
        name="myFrag"
        type="com.myapp.Fragment1" />
</data>
...
<Button
 android:id="@+id/step_button"
 style="@style/button_style"
 android:onClick="@{myFrag :: onButtonclick}"/>

Fragment1.java

public class Fragment1 extends Fragment {
.....
public void onButtonclick(View v)
{
  myStdent.setId("No ID");
}
.....
}

我觉得你不见了 http://prntscr.com/fm6yih(数据绑定对象的初始变量)

Layout1Binding myBinding = DataBindingUtil.inflate(inflater, R.layout.layout1.xml, container, false);
myBinding. setMyFrag(this);

以上几行代码已经解决了问题。我在 onCreateView 中添加了这些行。

在您的片段布局中 xml,定义一个片段变量。然后在您的片段 class 中,使用 binding.setVariable 将 xml 变量映射到片段。现在您应该可以使用 xml.

中的所有片段变量和方法了

在片段布局中xml:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.MyFragment">
<data>
    <variable
        name="frag"
        type="com.example.MyFragment" />
</data>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="@{() -> frag.yourMethod()}" />
 </RelativeLayout>
 </layout>

片段中:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
        val inflater = context?.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
        val binding = DataBindingUtil.inflate<ViewDataBinding>(inflater, R.layout.fragment_my, myFragmentContainer, true)
        binding.setVariable(BR.frag, this@MyFragment)
    }
}