在片段中创建自定义列表视图时出错。必需的活动,找到的片段
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)
【讨论】:
以上是关于在片段中创建自定义列表视图时出错。必需的活动,找到的片段的主要内容,如果未能解决你的问题,请参考以下文章
在 Unity3D 中创建自定义导入器时如何避免项目视图中有两个文件?