android - ListView可以出现在Activity中,但不能出现在Fragment中

标签 android listview android-fragments kotlin

ListView 可以出现在 Activity 但不能出现在 Fragment 但是我在 Kotlin 和 Android Studio 3.0 中使用相同的代码?

这是我的 fragment 代码:

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()

您正在使用 kotlin-android-extensions 直接获取您的 View 。如果您使用这种方式,您只能在创建 View 后获取您的 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() 在创建 View 后运行。因此它确保您的 View 已经创建。

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

在您的适配器代码中,将 R.layout.fragment_test 更改为您的模型布局。

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

希望对你有帮助:)

关于android - ListView可以出现在Activity中,但不能出现在Fragment中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45780492/

相关文章:

android - 我如何将数字/字符串存储到 R.string.xx 中?

android - 在 Android 中通知用户新推文

list - 从现有的json列表中提取唯一值以创建唯一的listview构建器

android - 防止在 FragmentPagerAdapter 中重新加载 WebView?

Android seekbar - 拇指在设置其可绘制对象后不可见

java - 删除App中之前添加的数据

java - 如何通过 ListView Item 链接到网站

android - ListView 元素的子元素在某个位置后重复

java - onBackPressed 并调用刷新函数 android

java - 从 fragment 中的 Activity 调用方法