我正在尝试通过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()
}
}
请帮助我!!!
答案 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
}
?>