在销毁并重新创建后,TextInputLayout未启用

时间:2017-07-04 09:01:40

标签: android kotlin android-view android-textinputlayout android-savedstate

简单布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.infinitebounds.myapplication.Main2Activity">

    <android.support.design.widget.TextInputLayout
        android:id="@+id/tip"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <EditText
            android:id="@+id/et"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="hint" />
    </android.support.design.widget.TextInputLayout>
</LinearLayout>

如果首次初始化活动,我将禁用textInputLayout

class Main2Activity : AppCompatActivity() {

    lateinit var tip: TextInputLayout
    lateinit var et: EditText

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main2)
        tip = findViewById(R.id.tip) as TextInputLayout
        et = findViewById(R.id.et) as EditText

        if (savedInstanceState == null) tip.isEnabled = false
    }
}

我检查了“不要保持活动”#34;选项。

因此,最初启动活动时,TextInputLayout被禁用。当我按下主页并返回时,它会再次重新启用。

所以我的问题是:

  1. 这是预期的行为吗?
  2. 重新制作时如何禁用TextInputLayout
  3. 修改

    这似乎也发生在EditText上。

1 个答案:

答案 0 :(得分:0)

  

这是预期的行为吗?

是的,它是(假设“不要保持活动”被选中)。

第一次启动应用时,savedInstanceState为空 - 您的if检查通过并将TextInputLayout的状态设置为已禁用。

只要您按主页按钮然后返回,系统就会调用onCreate(),但这次savedInstanceState 为空 - 您的if检查确实传递。

  

如何在重新创建时禁用TextInputLayout?

完全摆脱if检查,这没用。直接在tip.isEnabled = false内执行onCreate(),或在xml android:enabled="false"中执行此操作。