web-dev-qa-db-fra.com

Android Liaison de données - Erreur: (119, 29) Les identifiants doivent avoir des types définis par l'utilisateur dans le fichier XML. Main_radio_subscribe le manque

J'ai essayé de contrôler la visibilité d'une vue à l'aide des écouteurs d'attributs implicites ( référence ) dans Android liaison de données qui permet d'accéder aux vues par identifiant et d'accéder aux attributs comme vérifié , visible etc ..., cependant en essayant de l'utiliser, il lance une erreur comme ça

Error:(119, 29) Identifiers must have user defined types from the XML file. addTodo_switch_remind is missing it
<Android.support.v7.widget.SwitchCompat
        Android:id="@+id/addTodo_switch_remind"
        style="@style/MediumTextViewStyle"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_below="@+id/addTodo_space_project"
        Android:text="@string/add_todo_remind_label"
        Android:textOff="@string/generic_no_text"
        Android:textOn="@string/generic_yes_text" />

    <Android.support.v4.widget.Space
        Android:id="@+id/addTodo_space_remind"
        style="@style/FormsSpacingStyle"
        Android:layout_below="@+id/addTodo_switch_remind" />

    <LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_below="@id/addTodo_space_remind"
        Android:orientation="vertical"
        Android:padding="@dimen/grid_box_single"
        Android:visibility="@{addTodo_switch_remind.checked ? View.VISIBLE : View.GONE}">
15
Mushtaq Jameel

On dirait que les écouteurs d'attributs implicites utilisent le cas du chameau quand il est utilisé dans les expressions, grâce à cela post Je l'ai compris.

<!--Recurring Reminder -->
        <Android.support.v7.widget.SwitchCompat
            Android:id="@+id/addTodo_switch_remind"
            style="@style/MediumTextViewStyle"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_below="@+id/addTodo_space_project"
            Android:text="@string/add_todo_remind_label"
            Android:textOff="@string/generic_no_text"
            Android:textOn="@string/generic_yes_text" />

        <Android.support.v4.widget.Space
            Android:id="@+id/addTodo_space_remind"
            style="@style/FormsSpacingStyle"
            Android:layout_below="@+id/addTodo_switch_remind" />

        <LinearLayout
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:layout_below="@id/addTodo_space_remind"
            Android:orientation="vertical"
            Android:padding="@dimen/grid_box_single"
            Android:visibility="@{addTodoSwitchRemind.checked ? View.VISIBLE : View.GONE}">

Documenter pour ceux qui ont le même problème

22
Mushtaq Jameel

Lorsque vous utilisez View.VISIBLE/View.GONE dans votre fichier .xml, vous devez importer le type View en ajoutant <import type="Android.view.View"/> dans la section des données, comme suit:

<data>
    <import type="Android.view.View"/>

    <variable
        name="viewModel"
        type="xx.xx.MyViewModel"/>
</data>
46
Xiaoxi Zhang

Étape 1 : créer BindingAdapter :

@BindingAdapter("Android:visibility")
public static void setVisibility(final View view, @IdRes int layourId) {
    SwitchCompat switcher = (SwitchCompat)view.getRootView().findViewById(layourId)
    switcher.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
        {
            view.setVisibility(isChecked ? View.VISIBLE : View.GONE);
        }
    }
}

Étape 2 : importez la classe R dans la section de données de liaison de données layout.xml:

<data>
     <import type="example.package.R"/>
</data>

Étape 3 : liez la vue personnalisée à votre commutateur comme ceci:

<Android.support.v7.widget.SwitchCompat
    Android:id="@+id/addTodo_switch_remind"/>

<LinearLayout
    Android:visibility="@{R.id.addTodo_switch_remind">
3
XIII-th