如何防止视图在旋转期间更改

时间:2013-03-06 23:52:41

标签: android rotation views android-activity

我编写了一个简单的应用程序,它有一个TextView,当单击它时,它会变成一个EditText。

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;

public class Main extends Activity {
    static Context context;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = this;
        LinearLayout lL = new LinearLayout(this);
        TextView tv1 = new TextView(this);
        tv1.setText("tv1");
        tv1.setClickable(true);
        lL.addView(tv1);
        setContentView(lL);
        tv1.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                LinearLayout parent = (LinearLayout) v.getParent();
                parent.removeAllViews();
                EditText eT = new EditText(context);
                eT.setHint("Enter text here");
                parent.addView(eT, -1, -2);
                eT.requestFocus();
            }
        });
    }
}

但是,当我旋转手机时,我输入的文字消失了,视图返回到TextView。

我知道当我旋转手机时,活动暂停,停止,被摧毁,重新创建,重新启动,再次恢复。但是如何保持我的EditView的文本,焦点......?

我知道这是一个愚蠢的问题,因为我很可能从developer.android.com的活动生命周期指南中遗漏了一些内容

2 个答案:

答案 0 :(得分:1)

基本概念是,您需要在销毁活动之前的生命周期事件期间捕获并保存应用程序的当前状态,然后将该已保存状态应用于新创建的活动之后轮换后重新创建

以下是解决此问题的一个(很多)好的SO问题: Android: Efficient Screen Rotation Handling

答案 1 :(得分:0)

您可以在清单文件中进行修改。这有助于不改变方向。我认为这将解决您的问题

<activity
            android:name="com.example.bizzapp.StitchdMain"
            android:alwaysRetainTaskState="true"
            android:keepScreenOn="true"
            android:screenOrientation="landscape" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

//希望能帮助