簡體   English   中英

android - java.lang.IllegalStateException:片段未附加到上下文

[英]android - java.lang.IllegalStateException: Fragment not attached to a context

我在做什么

我正在創建一個應用程序,它有一個 RecyclerView 作為菜單。 由於我的應用程序有本地化,我需要使用字符串,保存在 strings.xml 中。

有什么問題?

嘗試將字符串值傳遞給參數會導致應用程序崩潰

我試過什么

  1. 使用 getString() 獲取所需的值會導致 illigalStateException 錯誤
  2. 嘗試使用 getString 創建單獨的字符串,並使用創建的字符串使應用程序崩潰
  3. context?.getString() 使應用程序崩潰

代碼:

frgSettings.kt

class frgSettings : Fragment() {

    var settingsList = listOf(
        dataItemsSettings(PUT STRING 1 HERE, PUT STRING 2 HERE, R.drawable.ic_colored_color_lens),
        dataItemsSettings(PUT STRING 1 HERE, PUT STRING 2 HERE, R.drawable.ic_colored_view_carousel),
    )

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

        retainInstance = true
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? = inflater.inflate(R.layout.fragment_settings, container, false)

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

        rvSettings.apply {
            layoutManager = LinearLayoutManager(activity)
            adapter = adapterSettings(settingsList)
        }
    }
}

適配器設置.kt

class adapterSettings(
    var settingsList: List<dataItemsSettings>
) : RecyclerView.Adapter<adapterSettings.SettingsViewHolder>() {

    inner class SettingsViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SettingsViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_settings, parent, false)
        return SettingsViewHolder(view)
    }

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

    override fun onBindViewHolder(holder: SettingsViewHolder, position: Int) {
        holder.itemView.apply {
            rvTitle.text = settingsList[position].stringTitle
            rvDescription.text = settingsList[position].stringDescription
            rvIcon.setImageResource(settingsList[position].itemIcon)
        }
    }
}

數據設置.kt

data class dataItemsSettings (
    var stringTitle: String,
    var stringDescription: String,
    val itemIcon: Int
)

嘗試在onViewCreated方法中初始化settingsList變量:

//...
lateinit var settingsList: List<dataItemsSettings>

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    settingsList = listOf(
            dataItemsSettings(PUT STRING 1 HERE, PUT STRING 2 HERE, R.drawable.ic_colored_color_lens),
            dataItemsSettings(PUT STRING 1 HERE, PUT STRING 2 HERE, R.drawable.ic_colored_view_carousel),
    )
    rvSettings.apply {
        layoutManager = LinearLayoutManager(activity)
        adapter = adapterSettings(settingsList)
    }
}

// ...

暫無
暫無

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

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