Android ListView可以出现在活动中,但可以';不要断断续续地出现

Android ListView可以出现在活动中,但可以';不要断断续续地出现,android,listview,android-fragments,kotlin,Android,Listview,Android Fragments,Kotlin,ListView可以出现在活动中,但不能出现在片段中,但是我在Kotlin和Android Studio 3.0中使用了相同的代码 这是我的片段代码: class testFrag : Fragment() { var adapter : mo3dAdapter?=null var listOfMkabala = ArrayList<MeetingDetails>() override fun onCreateView(inflater: LayoutInflater?, con

ListView可以出现在
活动中,但不能出现在
片段中,但是我在Kotlin和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){

}
类testFrag:Fragment(){
var适配器:mo3dAdapter?=null
var listOfMkabala=ArrayList()
覆盖创建视图(充气机:布局充气机?、容器:视图组?、savedInstanceState:捆绑?):视图{
返回充气机!!.充气(R.layout.fragment\u测试,容器,错误)
添加(会议详情(“nour1”、“ahmed1”、“aya1”))
添加(会议详情(“nour2”、“ahmed2”、“aya2”))
添加(会议详情(“nour3”、“ahmed3”、“aya3”))
添加(会议详情(“nour4”、“ahmed4”、“aya4”))
添加(会议详情(“nour5”、“ahmed5”、“aya5”))
添加(会议详情(“nour6”、“ahmed6”、“aya6”))
adapter=mo3dapter(上下文,listOfMkabala)
tv1.adapter=适配器
}
趣味测试(视图:视图){
}
这是我的适配器:

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
    }

}
内部类mo3dapter:BaseAdapter{
var listOfMkabaln=ArrayList()
变量上下文:上下文?=null
构造函数(context:context,listOfMkabaln:ArrayList):super(){
this.listOfMkabaln=listOfMkabaln
this.context=context
}
覆盖视图(p0:Int,p1:View?,p2:ViewGroup?):视图{
val mo3d=listOfMkabaln[p0]
var充气器=context!!.getSystemService(context.LAYOUT\u充气器\u服务)作为LayoutInflater
var myView=充气机。充气(R.layout.fragment\u测试,空)
myView.text1.text=mo3d.name1!!
myView.text2.text=mo3d.name2!!
myView.text3.text=mo3d.name3!!
返回myView
}
覆盖趣味getItem(p0:Int):任意{
返回列表Mkabaln[p0]
}
覆盖有趣的getItemId(p0:Int):长{
返回p0.toLong()
}
重写fun getCount():Int{
返回listOfMkabaln.size
}
}

在初始化后,您应该在
onCreateView()

您正在使用
kotlin android extensions
直接获取视图。如果您使用这种方式,则只有在创建视图后才能获取
LisView

您的代码应该是这样的

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()
在视图创建后运行。因此它确保您的视图已经创建

您也为适配器传递了相同的布局

在适配器代码中,将
R.layout.fragment\u test
更改为模型布局

var myView = inflator.inflate(R.layout.fragment_test, null)

希望它能有所帮助:)

您在
onCreateView
中编写了
return
语句之后的代码,我们称之为死代码(无法访问的代码)。这样您就不会在
列表视图中设置适配器

遵循3个步骤作为一般方法-

  • onCreate
    方法中初始化所有数据。在您的情况下,在
    ArrayList
    中添加数据将转到此处
  • 所以这看起来像——

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(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"))
    }
    
  • 仅在
    onCreateView
    中初始化布局资源。如下所示-

     override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, 
                          savedInstanceState: Bundle?): View? {
    
        return inflater!!.inflate(R.layout.fragment_test, container, false)
    }
    
  • 这与在UI上呈现数据有关,应该在
    onViewCreated
    方法中完成。在您的情况下,它应该像-

    override fun onViewCreated(view: View?, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
         adapter = mo3dAdapter (context  ,listOfMkabala)
         // Init your listview
         tv1 = view?.findViewById(R.id.your_listview_id);
         tv1.adapter = adapter
    }
    

  • 确保您初始化
    tv1
    ,并且它应该是
    ListView
    引用。

    不需要显式展开。双重撞击
    !!
    应该被视为错误。请解释一下,当我在appwait上打开碎片时@Xalamadraxit崩溃了,让我检查一下。@NourMedhatPost您的崩溃报告@nourmedhatty您必须如果您正在使用Android扩展,请说明。我在这行tv1=(ListView)视图中有错误。findViewById(R.id.tv1);什么错误?这是tv1?请显示您的导入,您是否正在使用kotlin Android扩展进行UI映射您正在以Java方式进行转换。应该是
    视图?.findViewById(R.id.your_ListView_id)作为ListView
    @NourMedhat请使用view?.findViewById(R.id.your_ListView_id)而不是(ListView)view?.findViewById(R.id.tv1)