android layout कोटलिन एंड्रॉइड नई गतिविधि शुरू करते हैं




android-layout android-studio (8)

मैं एंड्रॉइड पर एक और गतिविधि शुरू करना चाहता हूं लेकिन मुझे यह त्रुटि मिलती है:

कृपया कन्स्ट्रक्टर आमंत्रण निर्दिष्ट करें; क्लासिफायर 'पेज 2' में कोई साथी ऑब्जेक्ट नहीं है

Intent वर्ग को तत्काल करने के बाद। त्रुटि को सही करने के लिए मुझे क्या करना चाहिए? मेरा कोड:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    fun buTestUpdateText2 (view: View) {
        val changePage = Intent(this, Page2) 
        // Error: "Please specify constructor invocation; 
        // classifier 'Page2' does not have a companion object"

        startActivity(changePage)
    }

}

इसे इस्तेमाल करे

val intent = Intent(this, Page2::class.java)
startActivity(intent)

आप इसे आजमा सकते हैं,

val intent = Intent(this, SecondActivity::class.java)
intent.putExtra("key", value)
startActivity(intent)

गतिविधि से गतिविधि तक

val intent = Intent(this, YourActivity::class.java)
startActivity(intent)

टुकड़े से गतिविधि तक

val intent = Intent(activity, YourActivity::class.java)
startActivity(intent)

आपको कक्षा के प्रकार का दूसरा तर्क देना होगा। आप इसे नीचे की तरह थोड़ा और साफ भी कर सकते हैं।

startActivity(Intent(this, Page2::class.java).apply {
    putExtra("extra_1", value1)
    putExtra("extra_2", value2)
    putExtra("extra_3", value3)
})

आप इनलाइन BlahActivity::class.java जेनेरिक फ़ंक्शन को परिभाषित करके आमतौर पर पैरामीटर BlahActivity::class.java के विनिर्देश को सरल बना सकते हैं।

inline fun <reified T: Activity> Context.createIntent() =
    Intent(this, T::class.java)

क्योंकि यह आपको करने देता है

startActivity(createIntent<Page2>()) 

या यहां तक ​​कि सरल भी

inline fun <reified T: Activity> Activity.startActivity() {
    startActivity(createIntent<T>()) 
} 

तो अब यह है

startActivity<Page2>() 

ऐसा इसलिए है क्योंकि आपकी पृष्ठ Page2 कक्षा में कोई साथी ऑब्जेक्ट नहीं है जो जावा में static समान है ताकि आपकी कक्षा का उपयोग किया जा सके। अपनी कक्षा को Intent लिए तर्क के रूप में पास करने के लिए, आपको ऐसा कुछ करना होगा

val changePage = Intent(this, Page2::class.java)

यह मेरी मुख्य गतिविधि है जहां मैं संपादन टेक्स्ट से उपयोगकर्ता नाम और पासवर्ड लेता हूं और इरादे पर सेटिंग करता हूं

class MainActivity : AppCompatActivity() {
val userName = null
val password = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
    val intent = Intent([email protected],SecondActivity::class.java);
    var userName = username.text.toString()
    var password = password_field.text.toString()
    intent.putExtra("Username", userName)
    intent.putExtra("Password", password)
    startActivity(intent);
 }
}

यह मेरी दूसरी गतिविधि है जहां मुझे मुख्य गतिविधि से मूल्य प्राप्त करना होगा

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
var strUser: String = intent.getStringExtra("Username")
var strPassword: String = intent.getStringExtra("Password")
user_name.setText("Seelan")
passwor_print.setText("Seelan")
}

जावा में एक Activity शुरू करने के लिए हमने Intent(this, Page2.class) लिखा Intent(this, Page2.class) , मूल रूप से आपको दूसरे पैरामीटर में पहले पैरामीटर और गंतव्य वर्ग में Context परिभाषित करना होगा। स्रोत कोड में Intent विधि के अनुसार -

 public Intent(Context packageContext, Class<?> cls)

जैसा कि आप देख सकते हैं हमें Class<?> दूसरे पैरामीटर में टाइप करना होगा।

Intent(this, Page2) लिखकर Intent(this, Page2) हम कभी निर्दिष्ट नहीं करते कि हम कक्षा पारित करने जा रहे हैं, हम class प्रकार को पारित करने की कोशिश कर रहे हैं जो स्वीकार्य नहीं है।

::class.java उपयोग करें जो ::class.java में .class का विकल्प है। अपनी Activity शुरू करने के लिए नीचे कोड का प्रयोग करें

Intent(this, Page2::class.java)

उदाहरण -

val intent = Intent(this, NextActivity::class.java)
// To pass any data to next activity
intent.putExtra("keyIdentifier", value)
// start your next activity
startActivity(intent)




kotlin