我做了一个按钮,将它的pressed
状态绑定到一些可观察的状态。
在下面的示例中,可观察性是不变的。
尽管如此,此按钮在一段时间后或应用程序切换
后仍未按下活动代码如下:
public class TryResearchButtonUnpress extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.activity_try_research_button_unpress);
ActivityTryResearchButtonUnpressBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_try_research_button_unpress);
binding.setActivity(this);
}
public final ObservableBoolean pressed = new ObservableBoolean(true);
}
布局代码如下
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:tools="http://schemas.android.com/tools">
<data>
<variable name="activity" type="com.inthemoon.tryresearchbuttonunpress.TryResearchButtonUnpress"/>
</data>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/activity_try_research_button_unpress"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:gravity="center">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null"
android:pressed="@{activity.pressed}"
android:src="@drawable/record_selector"
/>
</RelativeLayout>
</layout>
资源和完整代码在GitHub中:https://github.com/dims12/TryResearchButtonUnpress
我怀疑这是因为我将值绑定到视图本身。这没有描述,但我自己冒了风险。
更新
我把observable放到了单独的类中,但是按钮仍然没有压缩。
更新2
我无法设置&#34;双向绑定&#34;使用以下代码
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null"
android:pressed="@={model.pressed}"
android:src="@drawable/record_selector"
/>
由于以下错误
错误:(8,58)错误:包 com.inthemoon.tryresearchbuttonunpress.databinding不存在 错误:任务&#39;:app:compileDebugJavaWithJavac&#39;执行失败。
java.lang.RuntimeException:发现数据绑定错误。 **** /数据绑定错误****消息:找不到属性的getter&#39; android:press&#39;值类型为boolean on android.widget.ImageButton。 文件:d:\用户\变暗\设计\ TryResearchButtonUnpress \程序\ SRC \主\水库\布局\ activity_try_research_button_unpress.xml 当前:18:8-24:13 **** \数据绑定错误****
答案 0 :(得分:0)
按钮 - 这是UI组件,提供反馈。我认为您需要创建two-way databinding来重现和存储按下(未按下)状态。即。
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@null"
android:pressed="@={activity.pressed}"
android:src="@drawable/record_selector"/>
接下来,您需要从视图实现@InverseBindingAdapter
反向绑定:
@InverseBindingAdapter(attribute = "android:pressed")
public static boolean getPressedState(ImageButton button){
return button.isPressed();
}
此外,您需要使用onSaveInstanceState()
menhod的覆盖来保存按钮状态,并在覆盖onRestoreInstanceState()
时恢复它。
答案 1 :(得分:-1)
我不确定twoway绑定是否有效,因为我从未使用它(尝试但从未工作过) 所以解决方法是
<Button
...
android:onClick="@{activity.onClicked}"/>
以及活动(作为ViewModel工作)
有一个方法
public void onCliked(Button view){
// update datamodel pressed state
model.setPressed(view.isPressed());
}
//免责声明..这只是伪代码,这个想法就是这个