3

J'essaie de lier de deux façons la valeur booléenne de mon modèle à RadioButton. Toutefois, le code ne compile pas. Je messages d'erreur suivants:Liaison de données bidirectionnelle Android avec bouton radio

Error:(41, 21) error: variable receiveDataContainer is already defined in method onChange()

Error:(45, 59) error: incompatible types: boolean cannot be converted to ReceiveDataContainer

Error:(46, 17) error: incompatible types: ReceiveDataContainer cannot be converted to boolean

Ma Classe:

public class ReceiveDataContainer extends BaseObservable { 
    private boolean isShopReceiveMethodChosen; 

    @Bindable 
    public boolean isShopReceiveMethodChosen() { 
     return isShopReceiveMethodChosen; 
    } 

    public void setShopReceiveMethodChosen(boolean isShopReceiveMethodChosen) { 
     this.isShopReceiveMethodChosen = isShopReceiveMethodChosen; 
     notifyPropertyChanged(BR.shopReceiveMethodChosen); 
    } 
} 

XML:

<RadioGroup 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:layout_marginEnd="16dp" 
      android:layout_marginStart="16dp" 
      android:layout_marginTop="16dp" 
      android:orientation="vertical" 
      app:layout_constraintLeft_toLeftOf="parent" 
      app:layout_constraintRight_toRightOf="parent" 
      app:layout_constraintTop_toBottomOf="@+id/inputLayoutPhoneNumber"> 

      <RadioButton 
       android:id="@+id/radio_receive_in_store" 
       android:text="@string/radio_button_receive_in_store" 
       android:checked="@={receiveDataContainer.shopReceiveMethodChosen}" 
       style="@style/CartReceptionRadioButton" /> 

      <RadioButton 
       android:id="@+id/radio_send_to_home" 
       android:text="@string/radio_button_send_to_home" 
       style="@style/CartReceptionRadioButton" /> 

     </RadioGroup> 

Et il est le code généré marqué comme non valide:

// Inverse Binding Event Handlers 
private android.databinding.InverseBindingListener radioReceiveInStorea = new android.databinding.InverseBindingListener() { 
    @Override 
    public void onChange() { 
     // Inverse of receiveDataContainer.shopReceiveMethodChosen 
     //   is receiveDataContainer.setShopReceiveMethodChosen((boolean) callbackArg_0) 
     boolean callbackArg_0 = radioReceiveInStore.isChecked(); 
     // localize variables for thread safety 
     // receiveDataContainer.shopReceiveMethodChosen 
     boolean shopReceiveMethodCho = false; 
     // receiveDataContainer 
     com.abastra.home_cook.catalogue.data.models.ReceiveDataContainer receiveDataContainer = mReceiveDataContaine; 
     // receiveDataContainer != null 
     boolean receiveDataContainer = false; 



     receiveDataContainer = (receiveDataContainer) != (null); 
     if (receiveDataContainer) { 




      receiveDataContainer.setShopReceiveMethodChosen((boolean) (callbackArg_0)); 
     } 
    } 
}; 

Qu'est-ce que ça vaut mentionner est que lorsque je retire "=" signe, le code compile.

S'il vous plaît aidez-moi ...

Répondre

0

D'accord, je l'ai résolu en changeant le nom de ma classe de ReceiveDataContainer à ReceiveContainer. Je ne sais pas pourquoi ça marche, mais il ne ...

Plus d'infos ici: https://code.google.com/p/android/issues/detail?id=212492

+0

Cela dépend de la longueur du nom de la variable dans votre mise en page. J'ai eu de longs noms et j'ai rencontré ce bug. Raccourcir les noms fonctionne. Il semble aussi qu'il a été corrigé dans AS 2.3 –