android get当我使用presenter进行绑定时,只允许一个布局元素和一个数据元素错误

时间:2017-03-14 13:42:24

标签: android data-binding android-databinding

我试图在没有任何绑定数据的情况下使用数据绑定到主要布局上的TextView等小部件,但是当我运行应用程序时出现此错误:

  

只允许一个布局元素和一个数据元素

主要布局

<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:slidingLayer="http://schemas.android.com/apk/res-auto">
    <data>
    </data>

    <variable
        name="presenter"
type="com.example.Ui.Register.Presenter.ActivityRegisterPresenter"/>

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#d1d1d1">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/permission_for_read_contacts"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:padding="5dp"
                    android:text="@string/permission_for_read_contacts"
                    android:textColor="@color/white"/>

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/default_textview_height"
                    android:text="@string/get_read_contact_permission"
                    android:background="@drawable/selector_blue_buttons"
                    android:clickable="@{()->presenter.getReadContactsPermission()}"
                    android:textColor="@color/white"/>
            </LinearLayout>

            <TextView
                android:id="@+id/activity_register_view_port"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:visibility="gone"/>
        </LinearLayout>
    </FrameLayout>
</layout>

在此活动中,我删除此行后,默认情况下不会有任何约束,例如setText

<variable
    name="presenter"
    type="com.example.Ui.Register.Presenter.ActivityRegisterPresenter"/>
问题解决了!!

public class ActivityRegisterPresenter {
    private ActivityRegisterContract.View view;

    public ActivityRegisterPresenter(ActivityRegisterContract.View mView) {
        view = mView;
    }

    public void getReadContactsPermission(){
        view.getReadContactsPermission();
    }
}

2 个答案:

答案 0 :(得分:1)

您的<variable>元素必须位于<data>元素内。

E.g:

<data>
    <variable
        name="presenter"
        type="com.example.Ui.Register.Presenter.ActivityRegisterPresenter"/>
</data>

答案 1 :(得分:1)

您需要在数据标记中编写变量标记,如下所示:

<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:slidingLayer="http://schemas.android.com/apk/res-auto">
    <data>

    <variable
        name="presenter"
type="com.example.Ui.Register.Presenter.ActivityRegisterPresenter"/>
    </data>
...

</layout>