2017-07-27 2 views
0

Hey ich habe versucht, dies zu tun tutorial jetzt habe ich das Problem, dass, wenn ich die App starte es stürzt ab, weil die Argumente meines Fragments null sind. Ich habe eine Antwort gefunden, dass ich das Fragment aus meiner content_main.xml entfernen muss, aber wenn ich das mache, startet die App, verhält sich aber seltsam und ich denke nicht, dass dies die richtige Antwort für das Problem ist.Wie verhindert man, dass onCreate of Fragment vor Java geladen wird?

So ist die onCreate() mein MainActivityFragment vor dem Java-Code genannt wird, so habe ich Probleme mit diesen Zeilen:

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    page = this.arguments.getInt("someInt", 0) 
    title = this.arguments.getString("someTitle") 
} 

Was ist die richtige Lösung für das Problem?

Mein Code ist auf github

Antwort

1

nach Ihrem GitHub Projekt, Sie implementieren Fragment Instanziierung in einer falschen Weise. Wenn Sie var fragment = MainActivityFragment() invoque Sie neue Instanz Ihres Fragment erstellen, aber keine arguments vorgesehen sind, so, wenn Ihr Fragment onCreate Methode aufgerufen wird, Argumente sind null und das ist der Grund, warum Ihre Anwendung abstürzt.

Um Ihre App Absturz beheben Sie Fragment instantiations auf die folgende Art und Weise implementieren müssen:

MainActivityFragment (Edited)

// Wrap new instance function inside companion object 
companion object { 
    // newInstance constructor for creating fragment with arguments 
    fun newInstance(page: Int, title: String): MainActivityFragment { 
     val fragmentFirst = MainActivityFragment() 
     val args = Bundle() 
     args.putInt("someInt", page) 
     args.putString("someTitle", title) 
     fragmentFirst.arguments = args 
     return fragmentFirst 
    } 
} 

//... 
override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    if(null != this.arguments) { 
     page = this.arguments.getInt("someInt", 1) 
     title = this.arguments.getString("someTitle") 
    } 
} 

MyPagerAdapter

override fun getItem(position: Int): Fragment? { 
    when (position) { 
     0 // Fragment # 0 - Ensure to return a new fragment instance with valid arguments 
     -> return MainActivityFragment.newInstance(0, "Page # 1") 
     1 // Fragment # 0 - This will show FirstFragment different title 
     -> return SecondFragment.newInstance(1, "Page # 2") 
     else -> return null 
    } 
} 

Nicht vergessen Umwickeln SecondFragmentnewInstance Funktion innerhalb des Begleitobjekts.

+0

danke für deine Antwort Ich habe das Projekt geändert, aber die App stürzt wegen einer Nullzeigerausnahme hier ab "page = this.arguments.getInt (" someInt ", 0)". Ich habe meine Änderungen für den Fall verschoben, dass ich einige falsche Änderungen vorgenommen habe. Ich habe auch das Fragment in meiner content_main.xml –

+0

@JohannesGnadlinger Entfernen Sie das enthaltene content_main Layout, das ist das gleiche Problem – AlexTa

+0

jetzt funktioniert es !! Danke für Ihre Hilfe –

Verwandte Themen