这是一个简单的项目:
activity_main.xml中
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/add_some_layout_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Add layout"/>
</LinearLayout>
some_layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/edittext_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:id="@+id/some_edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Some hint"
android:inputType="text"/>
</LinearLayout>
让我们考虑两种情况:
案例1:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final LinearLayout container = (LinearLayout) findViewById(R.id.container);
final LayoutInflater layoutInflater = LayoutInflater.from(MainActivity.this);
final View someLayoutWithEditText = layoutInflater.inflate(R.layout.some_layout, container, false);
container.addView(someLayoutWithEditText);
// button isn't used
}
}
案例1的影响: EditText会在配置更改期间保留其文本。
案例2:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final LinearLayout container = (LinearLayout) findViewById(R.id.container);
final LayoutInflater layoutInflater = LayoutInflater.from(MainActivity.this);
final View someLayoutWithEditText = layoutInflater.inflate(R.layout.some_layout, container, false);
Button addLayoutButton = (Button) findViewById(R.id.add_some_layout);
addLayoutButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
container.addView(someLayoutWithEditText);
}
});
}
}
案例2的效果我们在按钮上添加EditText点击=&gt;毕竟&#34;恢复部分&#34;已完成=&gt; EditText的状态尚未恢复
问题:如何在第二种情况下恢复EditText的状态?
答案 0 :(得分:1)
您的状态恢复是在onRestoreInstanceState()
方法中完成的,系统在onCreate之后调用它,因此如果您在恢复后添加视图,则状态将会丢失。
因此,如果您想保存视图的状态并手动恢复,而不是通过系统恢复,您可以执行下一步:
1)覆盖onSaveInstanceState()
方法并在Bundle参数的EditText中保存值。
2)从bundle中获取它并将其手动设置为EditText。