ListView可以出现在“活动"中,但不能出现在“片段"中 [英] ListView can appear in Activity but can't appear in Fragment

查看:97
本文介绍了ListView可以出现在“活动"中,但不能出现在“片段"中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆