无法更新Kotlin中的Pojo类

时间:2019-04-26 11:08:21

标签: android kotlin pojo

我正在尝试通过Kotlin中的特定单击来更新我的pojo类,但这给了我错误:-

  

java.lang.stackoverflowerror:堆栈大小8mb

这是我的Pojo课堂

class NavDrawerItem(var icon_normal: Int,var icon_notified: Int, var title: String, var isShowNotify: Boolean){
    var title1: String = title
        //  get() = title                    // Calls the getter recursively
        set(value)
        { title1 = value }

    var image: Int = icon_normal
        // get() = image
        set(value)
        { image = value }

    var image_notified: Int = icon_notified
        // get() = image
        set(value)
        { image_notified = value }


    var notify: Boolean = isShowNotify
        set(value) {
            notify = value
        }
}

我正在通过NavigationDrawer的Item点击更新我的Pojo

override fun onItemClick(position: Int) {
        mDrawerLayout?.closeDrawer(this!!.containerView!!)
        position1 = position
        for (i in navDrawerItems.indices) {
            val item = navDrawerItems[i]
            item.notify=(if (i == position) true else false)
            navDrawerItems[i] = item
            mAdapter?.notifyDataSetChanged()
        }
    }

请帮助我!!!

3 个答案:

答案 0 :(得分:1)

您的设置器会创建无限循环,从而导致StackOverflowError异常。

class NavDrawerItem(var icon_normal: Int,var icon_notified: Int, var title: String, var isShowNotify: Boolean){
    var title1: String = title
        //  get() = title                    // Calls the getter recursively
        set(value)
        { field = value }

    var image: Int = icon_normal
        // get() = image
        set(value)
        { field = value }

    var image_notified: Int = icon_notified
        // get() = image
        set(value)
        { field = value }


    var notify: Boolean = isShowNotify
        set(value) {
            field = value
        }
}

上面是设置字段,您的实现递归地设置了这些值。

此外,正如ADM所述,最好将notifyDataSetChanged移动到循环之外,而不是在每次迭代时都进行更新。

答案 1 :(得分:1)

将您的班级修改为简单的data class

data class NavDrawerItem(var icon_normal: Int,var icon_notified: Int, var title: String, var isShowNotify: Boolean)

还有

override fun onItemClick(position: Int) {
    mDrawerLayout?.closeDrawer(this!!.containerView!!)
    for (i in navDrawerItems.indices) {
        val item = navDrawerItems[i]
        item.notify=(i == position)
    }
    mAdapter?.notifyDataSetChanged()
}

答案 2 :(得分:0)

始终建议使用数据类定义pojos。 因为数据类仅用于存储数据。
它们比kotlin的普通班级提供许多独特功能。
例如,您不需要定义setter和getter,它们会自动添加到您的数据类中。
此外,您的数据类将自动覆盖一些有用的功能,例如等于 hashCode toString 等。

定义数据类非常容易。

<?php
if (isset($_POST['submit'])) {
    if(isset($_POST['optradio']))
    {
       Radio selection is :".$_POST['optradio'];  // Radio selection 
    }
?>