代码之家  ›  专栏  ›  技术社区  ›  Damn Vegetables

未调用自定义视图OnSaveInstanceState

  •  -1
  • Damn Vegetables  · 技术社区  · 6 年前

    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>
    

    活动:

    class MainActivity : AppCompatActivity()
    {
    
        override fun onCreate(savedInstanceState: Bundle?)
        {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
        }
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Onik    6 年前

    你看不见的原因 Log.d("ss", "save") 被调用只是在 return 声明。这个 onSaveInstanceState() 实际上是被调用的。查看日志移动 log.d(“ss”,“保存”) 在上面 return super.onSaveInstanceState() .