首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Kotlin Android Fragment recyclerView和上下文问题

Kotlin Android Fragment recyclerView和上下文问题
EN

Stack Overflow用户
提问于 2018-05-20 00:15:39
回答 2查看 9.8K关注 0票数 7

我想在片段中创建一个recyclerView,但是它显示了一个错误“java.lang.IllegalStateException: recylerView_Main在com.gph.bottomnavigation.FragmentMe.onCreateView(FragmentMe.kt:28)”中不能为空

  • 问题1)请帮助解决此问题。

但同样的代码在片段中不起作用,它显示错误,所以我将"recylerView_Main.layoutManager = LinearLayoutManager( this )“更改为"recylerView_Main.layoutManager = LinearLayoutManager(context)”它没有显示错误,我可以在模拟器中运行,但当我单击片段的导航按钮时,应用程序停止并显示此错误。请帮忙解决这个问题。

下面是FragmentMe.kt的代码:

代码语言:javascript
复制
class FragmentMe : Fragment() {

        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,


               savedInstanceState: Bundle?): View? {

        recylerView_Main.layoutManager = LinearLayoutManager(context)
        recylerView_Main.adapter = Mainadapter()

        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_me, container, false)
    }

}

下面是MainActivity.kt的代码:

代码语言:javascript
复制
class MainActivity : AppCompatActivity() {

    val manager = supportFragmentManager

    private val mOnNavigationItemSelectedListener = BottomNavigationView.OnNavigationItemSelectedListener { item ->
        when (item.itemId) {
            R.id.navigation_home -> {
                //message.setText(R.string.title_home)
                createFragmentQpon()
                return@OnNavigationItemSelectedListener true
            }
            R.id.navigation_dashboard -> {
                //message.setText(R.string.title_dashboard)
                createFragmentMe()
                return@OnNavigationItemSelectedListener true
            }
            R.id.navigation_notifications -> {
                //message.setText(R.string.title_notifications)
                createFragmentTools()
                return@OnNavigationItemSelectedListener true
            }

        }
        false
    }

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

        //Action Bar
        val actionBar = supportActionBar
        actionBar!!.setDisplayShowHomeEnabled(true)
        actionBar.setBackgroundDrawable(ColorDrawable(Color.parseColor("#00FFFFFF")))
        actionBar.setIcon(R.drawable.ic_home_black_24dp)
        actionBar.setDisplayShowTitleEnabled(false)

        createFragmentQpon()
        navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener)
    }

    fun createFragmentQpon() {
        val transaction = manager.beginTransaction()
        val fragment = FragmentQpon()
        transaction.replace(R.id.fragmentholder,fragment)
        transaction.addToBackStack(null)
        transaction.commit()
    }

    fun createFragmentMe() {
        val transaction = manager.beginTransaction()
        val fragment = FragmentMe()
        transaction.replace(R.id.fragmentholder,fragment)
        transaction.addToBackStack(null)
        transaction.commit()
    }

    fun createFragmentTools() {
        val transaction = manager.beginTransaction()
        val fragment = FragmentTools()
        transaction.replace(R.id.fragmentholder,fragment)
        transaction.addToBackStack(null)
        transaction.commit()
    }



}

下面是Mainadapter.kt的代码:

代码语言:javascript
复制
class Mainadapter: RecyclerView.Adapter<CustomViewHolder>() {

    val videolist = listOf("aaa","bbbb","cccc")

    override fun getItemCount(): Int {
        return  3
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomViewHolder {

        val layoutInflater = LayoutInflater.from(parent?.context)
        val cellForRow = layoutInflater.inflate(R.layout.tutorial_layout, parent, false)
        return CustomViewHolder(cellForRow)

    }

    override fun onBindViewHolder(holder: CustomViewHolder, position: Int) {

        var videoName = videolist.get(position)


        holder.itemView.title.text = videoName

    }


}

class CustomViewHolder(v: View): RecyclerView.ViewHolder(v) {
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-20 00:25:39

移动此代码

代码语言:javascript
复制
recylerView_Main.layoutManager = LinearLayoutManager(context)
recylerView_Main.adapter = Mainadapter()

onCreateViewonActivityCreated

覆盖onActivityCreated并放置上面的代码。

您的代码中有两点是不正确的:

  1. 您甚至在膨胀视图之前就试图访问recyclerView
  2. 片段的上下文在onCreateView中为空,可用于onAttach

之间

票数 15
EN

Stack Overflow用户

发布于 2020-04-19 06:59:04

代码语言:javascript
复制
recylerView_Main.layoutManager = LinearLayoutManager(this.context)

试一试,对我来说效果很好。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50427209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档