2017-07-27 37 views
0

嘿我試圖做到這一點tutorial現在我得到的問題是,當我啓動應用程序它崩潰,因爲我的片段的參數爲空。我發現了一個答案,我必須從我的content_main.xml中刪除片段,但是當我這樣做時,應用程序啓動但行爲怪異,我不認爲這是問題的正確答案。如何阻止在Java之前加載onCreate的片段?

所以我MainActivityFragment的OnCreate()是Java代碼之前調用,所以我買了這個問題行:

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

請告訴我對這個問題的解決方案?

我的代碼是github

回答

1

根據您的GitHub上項目,要實現以錯誤的方式Fragment實例。 當你invoque var fragment = MainActivityFragment(),你創建你的片段的新實例,但沒有提供arguments,所以,當你的片段onCreate方法被調用時,參數是null,這就是你的應用程序崩潰的原因。

要解決您的應用程序崩潰,你需要實現以下方法片段實例:

MainActivityFragment(編輯)

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

不要忘記以包裝SecondFragmentnewInstance伴侶對象內的功能。

+0

感謝您的回答我更改了項目,但由於這裏出現空指針異常,應用程序一直崩潰「page = this.arguments.getInt(」someInt「,0)」。如果我做了一些錯誤的更改,我推動了我的更改。我還在我的content_main.xml中添加了片段 –

+0

@JohannesGnadlinger刪除包含的content_main佈局,這將導致現在它工作的相同問題 – AlexTa

+0

!感謝您的幫助 –

相關問題