मैं लॉगिन स्क्रीन में एक फॉर्म को सत्यापित करना चाहता हूं जब ईमेल और पासवर्ड TextInputEditText लॉगिन कार्यक्षमता के लिए हैं। मैं संबंधित तर्क के साथ ObservableEmailText और ObservablePasswordText का उपयोग करता हूं। उसके लिए, मैं एक एक्सटेंशन फ़ंक्शन का उपयोग करता हूं

Extensions.kt

fun TextInputEditText.checkError(textInputLayout: TextInputLayout, errorMessage: String, isValid: (String)->Boolean): Observable<String> {
    return textChanges()
        .map { it.toString() }
        .doOnNext {
            if (it.isNotEmpty()) {
                textInputLayout.error = if (isValid(it)) null else errorMessage
            }
    }
}

MainActivity.kt

private val emailObservable
        get() = email_edit_text.checkError(email_input_layout, "Invalid Email") {
            viewModel.isEmailValid(it)
        }

private val phoneNumberObservable
        get() = password_edit_text.checkError(password_input_layout, "Invalid Password") {
            viewModel.isPasswordValid(it)
        }

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(getLayoutResource())

        compositeDisposable += Observable.combineLatest<String, String, Boolean>(
            emailObservable,
            phoneNumberObservable,
            BiFunction { t1, t2 -> viewModel.isEmailValid(t1) && viewModel.isPasswordValid(t2) }
        ).subscribe({
            if (it) login_button.visibility = View.VISIBLE
        }, {})
}

मुझे जिस समस्या का सामना करना पड़ रहा है, वह बटन पहली बार छिपाने के लिए रहता है जब मैंने ईमेल और पासवर्ड के तर्क को पूरा नहीं किया। लेकिन जब मैं ईमेल और पासवर्ड का लॉजिक पूरा करता हूं, तो यह दिखाई देने लगता है। बस ठीक है। दरअसल, मैं भी यही चाहता हूं। लेकिन समस्या यह है कि जब मैं टेक्स्ट को क्लियर करता हूं या टेक्स्ट कुछ ऐसा करता हूं जो टेक्स्ट व्यू से वैल्यू लेने के तर्क को पूरा नहीं करता है, तो यह भी दिखाई देता है। कैसे मैं इस मुद्दे को हल कर सकता हूँ

0
Aminul Haque Aome 28 जून 2020, 06:42

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा इसलिए है क्योंकि एक बार जब आप तर्क पूरा करते ही अपने बटन View.VISIBLE की दृश्यता बना रहे होते हैं। लेकिन अगर उसके बाद बदलाव होते हैं तो आप इसे फिर कभी नहीं छिपा रहे हैं।

तो अनिवार्य रूप से आप अपने सदस्यता भाग में एक और ब्लॉक खो रहे हैं

compositeDisposable += Observable.combineLatest<String, String, Boolean>(
            emailObservable,
            phoneNumberObservable,
            BiFunction { t1, t2 -> viewModel.isEmailValid(t1) && viewModel.isPasswordValid(t2) }
        ).subscribe({
            if (it) login_button.visibility = View.VISIBLE
            else login_button.visibility = View.GONE // This line is missing
        }, {})
1
Raj Suvariya 28 जून 2020, 04:22