通过数据绑定替换 xml 标记中的 onClick 事件
Replacement for onClick event in xml tag via Databinding
我的问题很简单,但我似乎做不到我想做的。
所以在我的 activity 我有这个方法。
public void performButtonClick(View view)
{
Log.i("INTRO", "OK");
}
这是从 xml 中定义的按钮单击事件调用的,就像这样
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="performButtonClick"
android:text="@string/start"/>
现在我听说这种方法使用反射会降低性能,所以我试图用数据绑定替换 onClick
事件。
我尝试了各种组合,例如
android:onClick="@{performButtonClick}"
或
android:onClick="@{(v) -> performButtonClick(v)}"
或
android:onClick="@{(v) -> MainActivity::performButtonClick}"
但其中 None 有效。
你能帮帮我吗?
好的回答我自己的问题。
我是 DataBinding 的新手,但我不明白为什么我必须使用复制粘贴的解决方案,这些解决方案利用了附件 Handlers
class 并最终得到比我使用的更多的样板代码有。
我想要的只是等同于 android:onClick="performButtonClick"
所以这是我的解决方案:
activity_main.xml
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="activity"
type="com.example.mydatabinding.MainActivity"/>
</data>
<LinearLayout
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{activity::performButtonClick}"
android:text="@string/start"/>
</LinearLayout>
MainActivity.java
public final class MainActivity extends AppCompatActivity
{
ActivityMainBinding binding;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setActivity(this);
}
public void performButtonClick(View view)
{
Log.i("INTRO", "OK");
}
}
我的问题很简单,但我似乎做不到我想做的。
所以在我的 activity 我有这个方法。
public void performButtonClick(View view)
{
Log.i("INTRO", "OK");
}
这是从 xml 中定义的按钮单击事件调用的,就像这样
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="performButtonClick"
android:text="@string/start"/>
现在我听说这种方法使用反射会降低性能,所以我试图用数据绑定替换 onClick
事件。
我尝试了各种组合,例如
android:onClick="@{performButtonClick}"
或
android:onClick="@{(v) -> performButtonClick(v)}"
或
android:onClick="@{(v) -> MainActivity::performButtonClick}"
但其中 None 有效。
你能帮帮我吗?
好的回答我自己的问题。
我是 DataBinding 的新手,但我不明白为什么我必须使用复制粘贴的解决方案,这些解决方案利用了附件 Handlers
class 并最终得到比我使用的更多的样板代码有。
我想要的只是等同于 android:onClick="performButtonClick"
所以这是我的解决方案:
activity_main.xml
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="activity"
type="com.example.mydatabinding.MainActivity"/>
</data>
<LinearLayout
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{activity::performButtonClick}"
android:text="@string/start"/>
</LinearLayout>
MainActivity.java
public final class MainActivity extends AppCompatActivity
{
ActivityMainBinding binding;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setActivity(this);
}
public void performButtonClick(View view)
{
Log.i("INTRO", "OK");
}
}