2017-08-05 57 views
19

chcę uruchomić inną aktywność na Androida, ale pojawia się ten błąd:Kotlin Android rozpocząć nową działalność

Please specify constructor invocation; classifier 'Page2' does not have a companion object

po uruchamianiu klasę Intent. Co powinienem zrobić, aby poprawić błąd? Mój kod:

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

} 
+0

Możliwy duplikat [Jak rozpocząć nowy aktywny używając Kotlin Język] (https://stackoverflow.com/questions/44845461/how-to-start-a-new-activity-using-kotlin-language) – BakaWaii

Odpowiedz

31

aby rozpocząć Activity w java pisaliśmy Intent(this, Page2.class), w zasadzie trzeba określić Context w pierwszym parametrze i klasy docelowego w drugim parametrze . Według Intent metody w kodzie źródłowym -

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

Jak widać musimy zdać Class<?> typ w drugim parametrze.

Pisząc Intent(this, Page2) nigdy nie określamy, że będziemy przechodzić klasy, staramy się przekazać typ class, który jest nie do zaakceptowania.

Użyj ::class.java, która jest alternatywą dla .class w kotlinach. Skorzystać z poniższego kodu, aby rozpocząć Activity

Intent(this, Page2::class.java) 
2

To dlatego, że klasa Page2 nie ma obiektu towarzysz, który jest podobny do static w Javie więc korzystać z klasą. Aby przekazać swoją klasę jako argument do Intent, trzeba będzie zrobić coś takiego

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

Można spróbować,

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

Spróbuj

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

Aby rozpocząć nowe działanie,

startActivity(Intent([email protected],RequiredClassName::class.java) 

więc zmień kod taki jak ten

class MainActivity : AppCompatActivity() { 

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

    fun buTestUpdateText2 (view: View) { 
     startActivity(Intent([email protected],ClassName::class.java)) 

     // Also like this 

     val intent = Intent([email protected],ClassName::class.java) 
     startactivity(intent) 
    }