android layout - Kotlin Android नई गतिविधि शुरू करता है




android-layout android-studio (9)

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

कृपया रचनाकार मंगलाचरण निर्दिष्ट करें; क्लासिफायर 'पेज 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)
    }

}

विवरण

  • एंड्रॉइड स्टूडियो 3.1.4
  • कोटलिन संस्करण: 1.2.60

चरण 1. आवेदन ()

आप आवेदन के संदर्भ के लिए लिंक प्राप्त करें

class MY_APPLICATION_NAME: Application() {

    companion object {
        private lateinit var instance: MY_APPLICATION_NAME
        fun getAppContext(): Context = instance.applicationContext
    }

    override fun onCreate() {
        instance = this
        super.onCreate()
    }

}

चरण 2. राउटर ऑब्जेक्ट जोड़ें

object Router {
    inline fun <reified T: Activity> start() {
         val context =  MY_APPLICATION_NAME.getAppContext()
         val intent = Intent(context, T::class.java)
         context.startActivity(intent)
    }
}

प्रयोग

// You can start activity from any class: form Application, from any activity, from any fragment and other  
Router.start<ANY_ACTIVITY_CLASS>()

अपने AndroidManifest.xml भी आप जो गतिविधि प्रस्तुत करना चाहते हैं, उसे जोड़ना याद रखें :-) यह मेरे लिए मुद्दा था।


आपको वर्ग प्रकार का दूसरा तर्क देना होगा। आप इसे नीचे की तरह थोड़ा और सुव्यवस्थित कर सकते हैं।

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

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

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

एक नई गतिविधि शुरू करने के लिए,

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

इसलिए अपना कोड बदलें:

startActivity(Intent(this@CurrentClassName,RequiredClassName::class.java)

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

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

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

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

उपयोग ::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)

मेरे पास एक समान मुद्दा था, मैंने कोटलिन में अपना आवेदन लिखना शुरू कर दिया, अपनी एक गतिविधि को फिर से लिखने के बाद मैं देखना चाहता था कि क्या कोई समस्या है या नहीं, समस्या यह थी कि मुझे यकीन नहीं था कि जावा फाइल को कोटलिन से कैसे भेजना है फ़ाइल।

इस मामले में मैंने कोटलिन (साथी ऑब्जेक्ट) में एक स्थिर फ़ंक्शन बनाया, इस फ़ंक्शन को एक संदर्भ मिल रहा है (वर्तमान गतिविधि से) और कोटलिन वर्ग का उपयोग करते हुए वर्तमान संदर्भ ("जावा" संदर्भ) का उपयोग करते हुए नया इरादा लौटाता है (" :: class.java ")।

यहाँ मेरा कोड है:

 //this code will be in the kotlin activity - SearchActivity
 companion object {

    fun newIntent(context: Context): Intent {
        return Intent(context, SearchActivity::class.java)
    }
}

    //this is how you call SearchActivity from MainActivity.java
Intent searchIntent = SearchActivity.Companion.newIntent(this);
startActivity(searchIntent);

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

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(this@MainActivity,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")
}

val intentAct: Intent = Intent(this@YourCurrentActivity, TagentActivity::class.java)
startActivity(intentAct)





kotlin