android - FindViewById का परिणाम डालने की आवश्यकता नहीं है?




casting (4)

हाल ही में मैंने पाया कि AndroidStudio मुझे कुछ क्लास कास्ट हटाने के लिए याद दिलाता है। मुझे याद है कि पुराने समय में, हमें findViewById का परिणाम डालना होगा, लेकिन अब यह आवश्यक नहीं है।

FindViewById का परिणाम अभी भी दृश्य है, इसलिए मैं जानना चाहता हूं कि हमें कक्षा में डालने की आवश्यकता क्यों नहीं है?

मैं किसी भी दस्तावेज का उल्लेख नहीं कर सकता, जो किसी को भी कोई दस्तावेज मिल सकता है?


API 26 से शुरू करके, findViewById इसके रिटर्न प्रकार के लिए findViewById का उपयोग करता है, इसलिए आपको अब कास्ट नहीं करना पड़ेगा।

पुरानी परिभाषा:

View findViewById(int id)

नई परिभाषा:

<T extends View> T findViewById(int id)

इसलिए यदि आपका compileSdk कम से कम 26 है, तो इसका मतलब है कि आप इसका उपयोग कर सकते हैं :)


इस article अनुसार:

मैनुअल कास्टिंग की आवश्यकता को समाप्त करने के लिए निम्नलिखित फ़ंक्शन जावा के जेनरिक स्वचालित प्रकार के निष्कर्ष पर निर्भर करता है:

protected <T extends View> T findViewById(@IdRes int id) {
    return (T) getRootView().findViewById(id);
}

एंड्रॉइड स्टूडियो कास्टिंग हटाने की याद दिलाता है, यदि आप दृश्य वर्ग से सामान्य विशेषताओं का उपयोग करते हैं, जैसे दृश्यता या कुछ सामान्य तरीके, जैसे onClick ()

उदाहरण के लिए:

((ImageView) findViewById(R.id.image_car)).setVisibility(View.VISIBLE);

इस मामले में आप बस लिख सकते हैं:

findViewById(R.id.image_car).setVisibility(View.VISIBLE);

पुराने संस्करणों में:

AutoCompleteTextView name = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView);

एसडीके 26 के साथ एंड्रॉइड स्टूडियो 3.0 से:

AutoCompleteTextView name = findViewById(R.id.autoCompleteTextView);






findviewbyid