在片段中创建自定义列表视图时出错。必需的活动,找到的片段

Posted

技术标签:

【中文标题】在片段中创建自定义列表视图时出错。必需的活动,找到的片段【英文标题】:Error creating custom listview in fragment. Required activity, found fragment 【发布时间】:2019-08-15 08:45:40 【问题描述】:

我决定在我的片段中创建 自定义列表视图,但我收到一个错误:

FragmentOne.kt: (41, 53): 类型不匹配:推断类型为 FragmentOne 但预计会有活动。

代码如下。

FragmentOne.kt

class FragmentOne : Fragment() 
    val name = arrayOf(
        "First catch","Second catch","Third catch","Fourth catch"
    )
    val date = arrayOf(
        "01.01.2019", "02.02.2010", "03.03.2003", "04.04.2004"
    )
    val imgId = arrayOf(
        R.drawable.fish
    )
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?

    ): View? 
        // Inflate the layout for this fragment




        return inflater.inflate(R.layout.screen1, container, false)

    

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) 
        super.onViewCreated(view, savedInstanceState)
        val myListAdapter = MyListAdapterInFragment(this,name,date,imgId)
        ListViewInFragment.adapter = myListAdapter

        
    

MyListAdapterInFragment.kt

class MyListAdapterInFragment(private val context: Activity, private val title: Array<String>, private val date: Array<String>, private val imgid: Array<Int>)
    : ArrayAdapter<String>(context, R.layout.list_iteminfragment, title) 

    override fun getView(position: Int, view: View?, parent: ViewGroup): View 
        val inflater = context.layoutInflater
        val rowView = inflater.inflate(R.layout.list_iteminfragment, null, true)

        val titleText = rowView.findViewById(R.id.title) as TextView
        val imageView = rowView.findViewById(R.id.imageViewInFragment) as ImageView
        val subtitleText = rowView.findViewById(R.id.date) as TextView

        titleText.text = title[position]
        imageView.setImageResource(imgid[position])
        subtitleText.text = date[position]

        return rowView
    

【问题讨论】:

MyListAdapterInFragment(this,name,date,imgId) – 将 this 更改为 activity 不知道为什么,但是您的代码应该在此处显示错误MyListAdapterInFragment(this,name,date,imgId),因为您正在传递需要活动上下文的片段上下文 【参考方案1】:

Fragment 类 没有在其层次结构中扩展Context 类。因此,我们无法通过它来代替context

但是,您可以通过两种方式将 context 带入片段。

    使用 Fragment 在其上膨胀的父 Activity:在需要 context 的地方键入 activity。 - >在你的情况下: val myListAdapter = MyListAdapterInFragment(activity,name,date,imgId)

    使用我们在onCreateView() 方法中收到的inflater 变量中的上下文:通过键入inflater.context - >在你的情况下: 创建一个属性val mContext:Context。 在 onCreateView() 方法中为其分配值mContext = inflater.context。 然后在您的适配器对象中使用它作为 val myListAdapter = MyListAdapterInFragment(mContext,name,date,imgId)

【讨论】:

【参考方案2】:

改变这个:

val myListAdapter = MyListAdapterInFragment(this,name,date,imgId)

到这里:

val myListAdapter = MyListAdapterInFragment(activity,name,date,imgId)

【讨论】:

【参考方案3】:

使用view.context 而不是this

val myListAdapter = MyListAdapterInFragment(view.context,name,date,imgId)

【讨论】:

以上是关于在片段中创建自定义列表视图时出错。必需的活动,找到的片段的主要内容,如果未能解决你的问题,请参考以下文章

在 Spring Boot 中创建自定义查询时出错

在 Unity3D 中创建自定义导入器时如何避免项目视图中有两个文件?

在 sklearn 中创建自定义转换器时出错 - 需要 2 个位置参数,但给出了 3 个

在 IOS 中创建自定义 UITableView

在 Xcode 中创建自定义 xib 视图大小

Android App 在片段中创建 ListView 引用时关闭