如何使用 ObservableField

How to use ObservableFields

我是 android 数据绑定的新手。在官方 document 中,我发现如果您没有太多数据可以捆绑到 Observable 对象中,则可以使用 ObservableFields(如果我错了请纠正我)。 我在需要显示和隐藏视图的布尔变量上的 Activity class.Based 旁边有一个布尔变量。我的问题是如何在布局 xml 文件中使用 ObservableBoolean 以及如何从相应的 activity?

绑定该变量

提前致谢。

在 Android Studio 2.2 中直接使用它存在一个错误,该错误已在 Android Studio 2.3 中修复。在 AS 2.3 中,您可以简单地这样做:

<layout>
    <data>
        <import type="android.view.View"/>
        <variable name="showView" type="android.databinding.ObservableBoolean"/>
    </data>
    <FrameLayout ...>
        <!-- more views -->
        <View android:visiblity="@{showView ? View.VISIBLE : View.GONE}" .../>
    </FrameLayout>
</layout>

然后在创建绑定时设置它:

private final ObservableBoolean showView = new ObservableBoolean(true);

@Override
public void onCreate(Bundle savedInstanceState) {
    MainActivityBinding binding = DataBindingUtil.setContentView(this,
        R.layout.main_activity);
    binding.setShowView(showView);
}

使用 Android Studio 2.2,您需要将该 ObservableField 包含在另一个对象中。由于它在您的 Activity 中,您可以通过它。你只需要让它成为 public(它们应该总是最终的)。

<layout>
    <data>
        <import type="android.view.View"/>
        <variable name="activity" type="com.example.myproj.ActivityMain"/>
    </data>
    <FrameLayout ...>
        <!-- more views -->
        <View android:visiblity="@{activity.showView ? View.VISIBLE : View.GONE}" .../>
    </FrameLayout>
</layout>

而你的 Activity 是这样的:

public class ActivityMain extends Activity {
    public final ObservableBoolean showView = new ObservableBoolean(true);

    @Override
    public void onCreate(Bundle savedInstanceState) {
        MainActivityBinding binding = DataBindingUtil.setContentView(this,
            R.layout.main_activity);
        binding.setActivity(this);
    }
}