ListView可以出现在“活动"中,但不能出现在“片段"中 [英] ListView can appear in Activity but can't appear in Fragment
问题描述
ListView可以出现在 Activity
中,但是不能出现在 Fragment
中.但是我在Kotlin和Android Studio 3.0中使用了相同的代码吗?
ListView can appear in Activity
but can't appear in Fragment
However I use the same code in Kotlin with Android Studio 3.0?
这是我的片段代码:
class testFrag : Fragment() {
var adapter : mo3dAdapter?=null
var listOfMkabala = ArrayList<MeetingDetails>()
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater!!.inflate(R.layout.fragment_test, container, false)
listOfMkabala .add ( MeetingDetails(" nour1", "ahmed1" , "aya1"))
listOfMkabala .add ( MeetingDetails(" nour2", "ahmed2" , "aya2"))
listOfMkabala .add ( MeetingDetails(" nour3", "ahmed3" , "aya3"))
listOfMkabala .add ( MeetingDetails(" nour4", "ahmed4" , "aya4"))
listOfMkabala .add ( MeetingDetails(" nour5", "ahmed5" , "aya5"))
listOfMkabala .add ( MeetingDetails(" nour6", "ahmed6" , "aya6"))
adapter = mo3dAdapter (context ,listOfMkabala)
tv1.adapter = adapter
}
fun test ( view: View){
}
这是我的适配器:
inner class mo3dAdapter: BaseAdapter {
var listOfMkabaln= ArrayList<MeetingDetails>()
var context:Context?=null
constructor(context:Context, listOfMkabaln: ArrayList<MeetingDetails>):super(){
this.listOfMkabaln=listOfMkabaln
this.context=context
}
override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View {
val mo3d = listOfMkabaln[p0]
var inflator = context!!.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
var myView = inflator.inflate(R.layout.fragment_test, null)
myView.text1.text = mo3d.name1!!
myView.text2.text = mo3d.name2!!
myView.text3.text = mo3d.name3!!
return myView
}
override fun getItem(p0: Int): Any {
return listOfMkabaln[p0]
}
override fun getItemId(p0: Int): Long {
return p0.toLong()
}
override fun getCount(): Int {
return listOfMkabaln.size
}
}
推荐答案
初始化后,您应该在自己的计算机中创建return语句 onCreateView()
.
You should make a return statement after your initialization in your
onCreateView()
.
您正在使用 kotlin-android-extensions
直接获取视图.如果使用这种方式,则只有在创建视图后才能获取 LisView
.
You are using kotlin-android-extensions
to get your view directly. If you use that way, you can get your LisView
only after view created.
您的代码应该是这样的.
Your code should be like this.
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater!!.inflate(R.layout.fragment_test, container, false)
}
override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
listOfMkabala .add ( MeetingDetails(" nour1", "ahmed1" , "aya1"))
listOfMkabala .add ( MeetingDetails(" nour2", "ahmed2" , "aya2"))
listOfMkabala .add ( MeetingDetails(" nour3", "ahmed3" , "aya3"))
listOfMkabala .add ( MeetingDetails(" nour4", "ahmed4" , "aya4"))
listOfMkabala .add ( MeetingDetails(" nour5", "ahmed5" , "aya5"))
listOfMkabala .add ( MeetingDetails(" nour6", "ahmed6" , "aya6"))
adapter = mo3dAdapter (context ,listOfMkabala)
tv1.adapter = adapter
}
onViewCreated()
在创建视图后运行.这样可以确保您的视图已经创建.
onViewCreated()
runs after the View has been created. So it ensures your view already created.
您还为适配器传递了相同的布局.
You have passed the same layout for your adapter too.
在适配器代码中,将 R.layout.fragment_test
更改为模型布局.
In your adapter code change the R.layout.fragment_test
to your model layout.
var myView = inflator.inflate(R.layout.fragment_test, null)
希望它会有所帮助:)
这篇关于ListView可以出现在“活动"中,但不能出现在“片段"中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!