簡體   English   中英

NullPointerException 在使用片段內的片段創建視圖 Kotlin

[英]NullPointerException At Creating view with fragment inside fragment Kotlin

當我啟動包含帶有 TabLayout 的 NavigationDrawer 的活動時,它會出現一個錯誤報告,指出 viewPager 不能是 null。 這是發生錯誤的代碼,在 viewPager.adapter = adapter... 的行中

希望有人能告訴我如何解決這個問題。

我在想我需要一種創建這些片段的方法

class fragment_nav_home : Fragment() {

    private fun setUpTabs() {
        val adapter = ViewPagerAdapter(childFragmentManager)

        adapter.addFragment(fragment_tab_artists(), "Artists")
        adapter.addFragment(fragment_tab_agencies(), "Agencies")

        viewPager.adapter = adapter

        tabs.setupWithViewPager(viewPager)
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setUpTabs()
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // Inflate the layout for this fragment
        // setUpTabs()
        return inflater.inflate(R.layout.fragment_nav_home, container, false)
    }
}

函數 addFragment 來自下一個 Kotlin class

class ViewPagerAdapter(supportFragmentManager: FragmentManager) :
    FragmentPagerAdapter(supportFragmentManager, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) {
    private val lstFragments = ArrayList<Fragment>();
    private val lstFragmentsTitles = ArrayList<String>();

    override fun getCount(): Int {
        return lstFragments.size
    }

    override fun getItem(i: Int): Fragment {
        return lstFragments[i]
    }

    override fun getPageTitle(i: Int): CharSequence? {
        return lstFragmentsTitles[i]
    }

    fun addFragment(fragment: Fragment, title: String) {

        lstFragments.add(fragment)
        lstFragmentsTitles.add(title)
    }
}

您的viewPager變量是 null,因此您不能在其上設置adapter屬性,因為null沒有。

你在哪里設置viewPager 看起來您沒有使用視圖綁定庫,因此您需要執行viewPager = findViewById(R.id.viewPager)或其他任何操作,例如在onCreateView

val view = inflater.inflate(R.layout.fragment_nav_home, container, false)
viewPager = view.findViewById(R.id.viewPager)
return view

或者如果您使用的是 Kotlin 合成(其中布局中的 ID 被轉換為具有相同名稱的變量,因此您可以訪問視圖而無需查找它們):

import kotlinx.android.synthetic.main.fragment_nav_home.*

在這種情況下,您需要在ViewPager布局中使用 ID 為“viewPager”的 ViewPager。

現在它是 null 因為你沒有分配它,或者它不存在(如果它被自動分配)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM