Kotlin Android start new Activity

后端 未结 17 2274
不知归路
不知归路 2020-12-07 23:33

I want to start another activity on Android but I get this error:

Please specify constructor invocation; classifier \'Page2\' does not have a companio

相关标签:
17条回答
  • 2020-12-08 00:12

    This is my main activity where i take the username and password from edit text and setting to the intent

    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);
     }
    }
    

    This is my second activity where i have to receive values from the main activity

    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")
    }
    
    0 讨论(0)
  • 2020-12-08 00:13
    val intentAct: Intent = Intent(this@YourCurrentActivity, TagentActivity::class.java)
    startActivity(intentAct)
    
    0 讨论(0)
  • 2020-12-08 00:17

    You can use both Kotlin and Java files in your application.

    To switch between the two files, make sure you give them unique < action android:name="" in AndroidManifest.xml, like so:

                <activity android:name=".MainActivityKotlin">
                    <intent-filter>
                        <action android:name="com.genechuang.basicfirebaseproject.KotlinActivity"/>
                        <category android:name="android.intent.category.DEFAULT" />
                        <action android:name="android.intent.action.MAIN" />
                        <category android:name="android.intent.category.LAUNCHER" />
                    </intent-filter>
                </activity>
                <activity
                    android:name="com.genechuang.basicfirebaseproject.MainActivityJava"
                    android:label="MainActivityJava" >
                    <intent-filter>
                        <action android:name="com.genechuang.basicfirebaseproject.JavaActivity" />
                        <category android:name="android.intent.category.DEFAULT" />
                    </intent-filter>
                </activity>
    

    Then in your MainActivity.kt (Kotlin file), to start an Activity written in Java, do this:

           val intent = Intent("com.genechuang.basicfirebaseproject.JavaActivity")
            startActivity(intent)
    

    In your MainActivityJava.java (Java file), to start an Activity written in Kotlin, do this:

           Intent mIntent = new Intent("com.genechuang.basicfirebaseproject.KotlinActivity");
            startActivity(mIntent);
    
    0 讨论(0)
  • 2020-12-08 00:26

    I had a similar issue, I started to write my application in Kotlin, after I rewrote one of my activities I wanted to see if there are any issues, the problem was that I was not sure how to send an intent from java file to kotlin file.

    In this case I created a static function in kotlin (companion object), this function is getting a context (from the current activity) and returning the new intent while using the current context ("java" context) while using the kotlin class ("::class.java").

    Here is my code:

     //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);
    
    0 讨论(0)
  • 2020-12-08 00:26

    How about this to consider encapsulation?

    For example:

    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_contents)
    
            val title = intent.getStringExtra(EXTRA_TITLE) ?: EXTRA_TITLE_DEFAULT
    
            supportFragmentManager.beginTransaction()
                .add(R.id.frame_layout_fragment, ContentsFragment.newInstance())
                .commit()
        }
    
        // Omit...
    
        companion object {
    
            private const val EXTRA_TITLE = "extra_title"
            private const val EXTRA_TITLE_DEFAULT = "No title"
    
            fun newIntent(context: Context, title: String): Intent {
                val intent = Intent(context, ContentsActivity::class.java)
                intent.putExtra(EXTRA_TITLE, title)
                return intent
            }
        }
    
    0 讨论(0)
  • 2020-12-08 00:28

    This is because your Page2 class doesn't have a companion object which is similar to static in Java so to use your class. To pass your class as an argument to Intent, you will have to do something like this

    val changePage = Intent(this, Page2::class.java)
    
    0 讨论(0)
提交回复
热议问题