कैसे एंड्रॉयड में रेडियो बटन के साथ बंधन दो तरह से डेटा का उपयोग करने

वोट
0

मैं रेडियो बटन के साथ बंधन दो तरह से डेटा का उपयोग करने की कोशिश कर रहा हूँ। यह एक तरह से `एंड्रॉयड की तरह के साथ ठीक काम कर रहा है: जाँच = @ {registration.gender.equals (Gender.FEMALE.getValue ())} । लेकिन मेरे समस्या मैं अपने मॉडल में चुनिंदा रेडियो बटन मूल्य निर्धारित करने की आवश्यकता है।

<?xml version=1.0 encoding=UTF-8?>
<layout xmlns:android=http://schemas.android.com/apk/res/android xmlns:app=http://schemas.android.com/apk/res-auto xmlns:tools=http://schemas.android.com/tools>
   <data>
      <import type=com.callhealth.customer.comman.enums.Gender />
      <import type=android.text.TextUtils />
      <import type=java.lang.Integer />
      <variable name=callback type=com.callhealth.customer.usermanagement.callback.RegistrationCallback />
      <variable name=registration type=com.callhealth.customer.usermanagement.model.request.LoginAndRegistrationRequestModel />
   </data>
   <LinearLayout android:layout_width=match_parent android:layout_height=wrap_content android:layout_marginTop=10dp android:orientation=vertical>
      <android.support.v7.widget.AppCompatTextView android:layout_width=match_parent android:layout_height=wrap_content android:[email protected]/label_gender android:textSize=15sp />
      <RadioGroup android:[email protected]+id/gender_group android:layout_width=match_parent android:layout_height=wrap_content android:layout_marginTop=5dp android:orientation=horizontal>
         <android.support.v7.widget.AppCompatRadioButton android:layout_width=wrap_content android:[email protected]={registration.gender.equals(Gender.MALE.getValue())} android:layout_height=wrap_content android:[email protected]/label_male />
         <android.support.v7.widget.AppCompatRadioButton android:layout_width=wrap_content android:layout_height=wrap_content android:layout_marginLeft=20dp android:layout_marginStart=20dp android:[email protected]={registration.gender.equals(Gender.FEMALE.getValue())} android:[email protected]/label_female />
      </RadioGroup>
   </LinearLayout>
</layout>

मेरे मॉडल क्लास

public class LoginAndRegistrationRequestModel extends BaseObservable {

    private Integer gender;

    @Bindable
    public Integer getGender() {
        return gender;
    }

    public void setGender(Integer gender) {
        this.gender = gender;
        notifyPropertyChanged(BR.gender);
    }   
}

जब मैं का उपयोग करने के कोशिश कर रहा हूँ

android:[email protected]={registration.gender.equals(Gender.FEMALE.getValue())} 

Gradel एक त्रुटि फेंक रहा है

Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> android.databinding.tool.util.LoggedErrorException: Found data binding errors.
  ****/ data binding error ****msg:The expression registrationGender.equals(com.callhealth.customer.comman.enums.Gender.MALE.getValue()) cannot be inverted: There is no inverse for method equals, you must add an @InverseMethod annotation to the method to indicate which method should be used when using it in two-way binding expressions
  file:S:\Umesh\android\android_studio_workspace\CallHealth\app\src\main\res\layout\content_user_registration.xml
  loc:148:48 - 148:97
  ****\ data binding error ****
09/03/2018 को 11:01
उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
0

आप एक के लिए यह बाध्यकारी हैं booleanअभिव्यक्ति। यह पता नहीं क्या विधि जब यह स्थापित करने के कॉल करने के लिए है। मैं अपनी संपत्ति एक बनाने की कोशिश करेगा boolean(उदाहरण के लिए isFemale)। यह भी एक तरह से @InverseMethod टिप्पणी के साथ सेटर इंगित करने के लिए है की तरह लगता है, लेकिन मुझे लगता है कि उपयोग नहीं किया है और मुझे लगता है कि booleanदृष्टिकोण और अधिक सरल हो जाएगा। तुम हमेशा लागू कर सकता है booleanके मामले में गुण Integer genderक्षेत्र अगर आप का उल्लेख करना चाहता था Integerजावा कोड में कहीं।

10/03/2018 को 15:55
का स्रोत उपयोगकर्ता

वोट
0

कोशिश करो

Blockquote

एंड्रॉयड में दो तरह से डेटा बाइंडिंग: कुछ ही घंटों के बाद मैं आसान रास्ता मिल गया। यह livedata और Kotlin के साथ आधार कंकाल है। इसके अलावा, आप ObservableField उपयोग कर सकते हैं ()

  • आंकड़ों के अपने viewmodel सेट

  • बटन के साथ अपने RadioGroup बनाएं रूप में आप की तरह। महत्वपूर्ण: सभी रेडियो बटन आईडी सेट !!!

  • अपने रेडियो समूह में स्थापित दो तरह से जाँच की चर (उपयोग viewmodel चर) के लिए बाध्य

  • का आनंद लें)

layout.xml

<data>
    <variable
        name="VM"
        type="...YourViewModel" />
</data>


<LinearLayout
            android:id="@+id/settings_block_env"
            ...
            >


            <RadioGroup

                android:id="@+id/env_radioGroup"
                android:checkedButton="@={VM.radio_checked}">

                <RadioButton
                    android:id="@+id/your_id1"/>

                <RadioButton
                   android:id="@+id/your_id2" />

                <RadioButton
                    android:id="@+id/your_id3"/>

                <RadioButton
                    android:id="@+id/your_id4"/>
            </RadioGroup>

        </LinearLayout>

class YourViewModel(): ViewModel {

var radio_checked = MutableLiveData<Int>()


init{
    radio_checked.postValue(R.id.your_id1)//def value
}

//other code
}

Blockquote

18/01/2019 को 20:19
का स्रोत उपयोगकर्ता

वोट
0

आप या तो एक बना सकते हैं @InverseMethodकस्टम कनवर्टर के लिए (त्रुटि कहना है कि वह मूल रूप से लिंग को बराबरी परिवर्तित नहीं कर सकते) या सिर्फ बदलाव के लिए एक बूलियन नमूदार का उपयोग करें और सेटर बॉक्स से बाहर काम करेंगे।

उदाहरण के लिए अगर आपके पास

val isFemale = ObservableBoolean() 

अपने ViewModel में इस बॉक्स से बाहर काम करेंगे

android:checked="@={viewModel.isFemale}" 

निश्चित रूप से आप लेआउट बंधन में ViewModel चर प्रदान करने के लिए की जरूरत है।

"ठीक" क्या आपके पास करने के लिए वहाँ आप जाँच के लिए अपने स्वयं के उलटा विधि और सेटर बनाना होगा।

@InverseMethod("toGender")
public static int isFemaleGender(Integer gender) {
        return gender.equals(Gender.FEMALE.getValue());
    } 

public static Integer toGender(boolean checked) {
        if (checked) 
           return Gender.FEMALE;
        else 
           return Gender.MALE;
    }

इन तरीकों के दोनों केवल यदि आप 2 विकल्प हैं के रूप में आप सही गलत मूल रूप से कर काम करेंगे। यह या तो आप एक बनाने के है Observableप्रत्येक विकल्प के लिए या @Serega Maleev द्वारा प्रदान समाधान के साथ जाना

16/03/2020 को 15:27
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more