Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 自定义视图,不调用onSaveInstanceState_Android_Kotlin_Android View_Android Custom View - Fatal编程技术网

Android 自定义视图,不调用onSaveInstanceState

Android 自定义视图,不调用onSaveInstanceState,android,kotlin,android-view,android-custom-view,Android,Kotlin,Android View,Android Custom View,我创建了一个自定义视图,并尝试在屏幕旋转时自动恢复状态(就像EditText自动恢复当前输入文本一样),但当我看到日志时,不会调用onSaveInstanceState,只调用onRestoreInstanceState。怎么了 class MyView:LinearLayout { constructor(context: Context?) : super(context) constructor(context: Context?, attrs: AttributeSet?

我创建了一个自定义视图,并尝试在屏幕旋转时自动恢复状态(就像
EditText
自动恢复当前输入文本一样),但当我看到日志时,不会调用
onSaveInstanceState
,只调用
onRestoreInstanceState
。怎么了

class MyView:LinearLayout
{
    constructor(context: Context?) : super(context)
    constructor(context: Context?, attrs: AttributeSet?) : super(context, attrs)
    constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(
            context, attrs, defStyleAttr)

    init
    {
        isSaveEnabled=true
    }

    override fun onSaveInstanceState(): Parcelable
    {
        return super.onSaveInstanceState()
        Log.d("ss", "save")
    }

    override fun onRestoreInstanceState(state: Parcelable?)
    {
        super.onRestoreInstanceState(state)
        Log.d("ss", "restore")
    }
}
活动布局:

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/top"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.loser.mylayouttest.MyView
        android:id="@+id/myView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</AbsoluteLayout>

无法看到调用的
Log.d(“ss”、“save”)
的原因很简单,代码行是在
return
语句之后调用的。实际上调用了
onSaveInstanceState()
。要查看日志,请在上面移动
log.d(“ss”,“save”)
返回super.onSaveInstanceState()

调用
onSaveInstanceState()
的场景是什么?屏幕旋转。
AbsoluteLayout
不是自API 3以来就被弃用了吗?尝试
FrameLayout
——并将Log语句放在return语句的上方。我没有注意到自动插入的“return”超级调用。我知道AbsoluteLayout不受欢迎,但我只想在这个例子中使用最简单的东西(这不是实际的项目)。所以OP应该在返回superWell之前调用日志,这很尴尬。超级调用是由IDE自动插入的,所以我没有注意到它是一个return语句。
class MainActivity : AppCompatActivity()
{

    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}