Системные службы недоступны для Activity до onCreate (), с Android RecyclerView внутри фрагмента Kotlin - PullRequest
0 голосов
/ 21 марта 2020

У меня проблемы с Android RecyclerView в Kotlin внутри фрагмента, который находится в разделе Домашняя активность. Вот мой код:

myFragmentLayout:

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/rvChapterList"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

myFragmentCode:

    val chaptersList: ArrayList<String> = ArrayList()
    private lateinit var layoutManager: RecyclerView.LayoutManager

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        return inflater.inflate(R.layout.courses_layout, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        chaptersList.add("Android")
        chaptersList.add("Kotlin")
        chaptersList.add("RecyclerView")
        layoutManager = LinearLayoutManager(context)
        rvChapterList.layoutManager = layoutManager
        rvChapterList.adapter = ChapterAdapter(Home(), chaptersList)
     }

и myChapterAdapter:

class ChapterAdapter(private val context: Home, private val chaptersList: ArrayList<String>) : RecyclerView.Adapter<ChapterAdapter.ViewHolder>() {

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        return ViewHolder(LayoutInflater.from(context).inflate(R.layout.list_item, parent, false))
    }

    override fun getItemCount(): Int {
        return chaptersList.size
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.chapterName?.text = chaptersList.get(position)
        holder.itemView.setOnClickListener {
            Toast.makeText(context, chaptersList.get(position), Toast.LENGTH_LONG).show()
        }
    }

    class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
        val chapterName = view.tvChapterName
    }
}

Он получил этот код от этот учебник, он работает внутри действия, но не внутри фрагмента.

1 Ответ

0 голосов
/ 21 марта 2020
rvChapterList.adapter = ChapterAdapter(Home(), chaptersList)

Никогда не создавайте Activity или другой тип Context самостоятельно. Вы всегда получаете их из фреймворка.

Замените это на:

rvChapterList.adapter = ChapterAdapter(requireActivity(), chaptersList)

и измените свойство context в ChapterAdapter на Context или Activity, а не Home.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...