Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.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 在屏幕旋转时保存动态创建的布局_Android_Layout_Dynamic - Fatal编程技术网

Android 在屏幕旋转时保存动态创建的布局

Android 在屏幕旋转时保存动态创建的布局,android,layout,dynamic,Android,Layout,Dynamic,我在活动第一次启动时动态创建布局,问题是当屏幕旋转时,它再次撞击数据库以创建布局。如何保存布局,使其不会在每次更改屏幕方向时重新创建?查看文档以覆盖默认旋转行为:您可以使用 @Override protected void onSaveInstanceState(Bundle outState) { // SAVE YOUR DATA IN "outstate" BUNDLE super.onSaveInstanceState(outState); } @Override pro

我在活动第一次启动时动态创建布局,问题是当屏幕旋转时,它再次撞击数据库以创建布局。如何保存布局,使其不会在每次更改屏幕方向时重新创建?

查看文档以覆盖默认旋转行为:

您可以使用

@Override
protected void onSaveInstanceState(Bundle outState) {
    // SAVE YOUR DATA IN "outstate" BUNDLE
    super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    // RESTORE YOUR DATA FROM savedInstanceState.
    super.onRestoreInstanceState(savedInstanceState);
}
保存数据包并在onRestoreInstanceState中再次还原它

下面是一个例子

public class Test_stflowActivity extends Activity {
    String initial_text = null;
    boolean already_created = false;
    TextView tv = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        tv = (TextView) findViewById(R.id.textView1);

        if (savedInstanceState == null) {
            initial_text = "bharat";
            loadNew();
        }
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        initial_text = "sharma";
        outState.putString("initial_text", initial_text);
        super.onSaveInstanceState(outState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        initial_text = savedInstanceState.getString("initial_text");
        loadNew();
        super.onRestoreInstanceState(savedInstanceState);
    }

    void loadNew() {
        tv.setText(initial_text);
    }
}
下面是xml布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/RelativeLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="139dp"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout


明白了!创建一个片段并加载在onCreate期间动态创建的视图的ArrayList。设置setRetainInstance(真);和On Pause清除视图,On Resume从ArrayList重新加载视图。使用setRetainInstance(true),onCreate将不会再次调用,因此它不会从数据库加载。

OnRetainOnConfiguration实例已被弃用。尝试使用片段,但不会保留动态加载的视图。但是如何将视图保存到捆绑包?您不需要每次旋转设备时都保存视图,它将再次调用“创建”。通过恢复视图,可以在视图上重新应用数据。通过这种方式,您的视图将重新创建,您以前的数据将自动设置..抱歉,我不懂。在一次循环中,会调用setContentView并清除我动态添加的视图。(对不起,我无法将其格式化)
@Override public void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE\u NO\u TITLE);setContentView(R.layout.myLayout);如果(savedInstanceState==null){//从数据库加载所有布局数据loadNew();}getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);}删除此if大小写并尝试if(savedInstanceState==null)不要使用save intance和restore instance检查它..恭喜修复!如果您能够,请确保将您的答案标记为“已接受”(使用绿色复选标记),以使其他人能够从您的成功中学习。干杯~