Android 方向更改后如何保存在EditText中输入的文本?

Android 方向更改后如何保存在EditText中输入的文本?,android,android-layout,screen-orientation,android-lifecycle,Android,Android Layout,Screen Orientation,Android Lifecycle,我有两项活动: 1.包含listview的主要活动; 2.将项目添加到主活动中的listview的第二个活动 对于第二个活动,我为景观创建了布局土地布局 在第二个活动在肖像中打开后,我将其更改为景观模式-第二个活动关闭,应用程序返回主活动 问题: 1.更改方向后,如何将输入的值保存到编辑文本字段 2.当屏幕方向改变为景观时,如何将布局用地应用于第二个活动 UPD 第二个活动代码: public class AddItem extends MainScreen implements OnClick

我有两项活动: 1.包含listview的主要活动; 2.将项目添加到主活动中的listview的第二个活动

对于第二个活动,我为景观创建了布局土地布局

在第二个活动在肖像中打开后,我将其更改为景观模式-第二个活动关闭,应用程序返回主活动

问题: 1.更改方向后,如何将输入的值保存到编辑文本字段

2.当屏幕方向改变为景观时,如何将布局用地应用于第二个活动

UPD 第二个活动代码:

public class AddItem extends MainScreen implements OnClickListener{
final String LOG_TAG = "myLogs";
EditText comment_enter, link_enter, password_enter, login_enter, title_enter, date_enter;
Button add_item_button, add_more_button, clear_close_button;
CheckBox showPass;
DBHelper db;
DataBase DB;
SimpleCursorAdapter passListViewAdapter;
SimpleDateFormat sdf;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.add_item);
    Log.d(LOG_TAG, "before edit : ");

    comment_enter = (EditText) findViewById(R.id.comment_enter);
    link_enter = (EditText) findViewById(R.id.link_enter);
    password_enter = (EditText) findViewById(R.id.password_enter);
    login_enter = (EditText) findViewById(R.id.login_enter);
    title_enter = (EditText) findViewById(R.id.title_enter);
    date_enter = (EditText) findViewById(R.id.date_enter);

    showPass = (CheckBox) findViewById(R.id.showPass);
       showPass.setOnCheckedChangeListener(new OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView,
                boolean isChecked) {
            Log.d(LOG_TAG, "is checked : " + isChecked);
            if (isChecked) {
                password_enter.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
            } 
            else {
                password_enter.setInputType(129);
            }
        }
    });

    add_item_button = (Button) findViewById(R.id.add_item_button);
    add_item_button.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {
             Log.d(LOG_TAG, "add_item_button : ");
             String title_str = title_enter.getText().toString();
             String login_str = login_enter.getText().toString();
             String pass_str = password_enter.getText().toString();
             String link_str = link_enter.getText().toString();
             String comm_str = comment_enter.getText().toString();
             String date_str = date_enter.getText().toString();
                 byte[] login_byted = null;
                try {
                    login_byted = login_str.getBytes("UTF-8");
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                 String login_crypted = Base64.encodeToString(login_byted, Base64.DEFAULT);
                 Log.d(LOG_TAG, "Crypted login" + login_crypted);

                 byte[] pass_byted = null;
                try {
                    pass_byted = pass_str.getBytes("UTF-8");
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                 String pass_crypted = Base64.encodeToString(pass_byted, Base64.DEFAULT);
                  Log.d(LOG_TAG, "Crypted login" + pass_crypted);
             DataBase DB = new DataBase(AddItem.this);
             DB.open();

             DB.insertPass(title_str, login_crypted, pass_crypted, link_str, comm_str, date_str);
             DB.close();
             Log.d(LOG_TAG, "after inserting into DB : ");
             finish();
        }
    });

    add_more_button = (Button) findViewById(R.id.add_more_button);
    add_more_button.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {
             Log.d(LOG_TAG, "add_more_button : ");
             String title_str = title_enter.getText().toString();
             String login_str = login_enter.getText().toString();
             String pass_str = password_enter.getText().toString();
             String link_str = link_enter.getText().toString();
             String comm_str = comment_enter.getText().toString();
             String date_str = date_enter.getText().toString();
             byte[] login_byted = null;
                try {
                    login_byted = login_str.getBytes("UTF-8");
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                 String login_crypted = Base64.encodeToString(login_byted, Base64.DEFAULT);
              Log.d(LOG_TAG, "Crypted login" + login_crypted);

              byte[] pass_byted = null;
                try {
                    pass_byted = pass_str.getBytes("UTF-8");
                } catch (UnsupportedEncodingException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                 String pass_crypted = Base64.encodeToString(pass_byted, Base64.DEFAULT);
               Log.d(LOG_TAG, "Crypted login" + pass_crypted);
             DataBase DB = new DataBase(AddItem.this);
             DB.open();
             DB.insertPass(title_str, login_crypted, pass_crypted, link_str, comm_str, date_str);
             DB.close();
             Log.d(LOG_TAG, "after inserting into DB : ");
             fieldClear();
             String link_enter_str = link_enter.getText().toString();
            if(link_enter_str.equals("")){
                    link_enter.setText("http://www.");
            }
        }
    });

    clear_close_button = (Button) findViewById(R.id.clear_close_button);
    clear_close_button.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {
             Log.d(LOG_TAG, "clear/close click button : ");
             boolean checkRes = emptyAllCheck();
             Log.d(LOG_TAG, "result : " + checkRes);
             if(checkRes == true){
                 finish();
             }
             fieldClear();
        }
    });

    if(savedInstanceState != null){
        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        Log.d(LOG_TAG, "title : " + savedInstanceState.getString("title"));
        title_enter.setText(savedInstanceState.getString("title")); 
        login_enter.setText(savedInstanceState.getString("login"));
        password_enter.setText(savedInstanceState.getString("pass"));
        link_enter.setText(savedInstanceState.getString("link"));
        comment_enter.setText(savedInstanceState.getString("comm"));
        date_enter.setText(savedInstanceState.getString("date"));
        add_item_button = (Button) findViewById(R.id.add_item_button);
        add_more_button = (Button) findViewById(R.id.add_more_button);
        }
    else {
        Log.d(LOG_TAG, "before getting date : ");
    SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
    String date = sdf.format(new Date(System.currentTimeMillis()));
    date_enter.setText(date);
    }

}

@Override
    protected void onPause() {
    super.onPause();
    finish();
    Log.d(LOG_TAG, "onPause : ");
    }

@Override
protected void onResume(){
    super.onResume();

}

protected void onSaveInstanceState(Bundle saveInstance) {
    super.onSaveInstanceState(saveInstance);

    String title_str = title_enter.getText().toString();
     String login_str = login_enter.getText().toString();
     String pass_str = password_enter.getText().toString();
     String link_str = link_enter.getText().toString();
     String comm_str = comment_enter.getText().toString();
     String date_str = date_enter.getText().toString();
     saveInstance.putString("title", title_str);
     saveInstance.putString("login", login_str);
     saveInstance.putString("pass", pass_str);
     saveInstance.putString("link", link_str);
     saveInstance.putString("comm", comm_str);
     saveInstance.putString("date", date_str);
     Log.d(LOG_TAG, "onSaveInstanceState +" + title_str + login_str + pass_str + link_str + comm_str + date_str);
  }

public void fieldClear(){
    comment_enter.setText("");
    link_enter.setText("http://www.");
    password_enter.setText("");
    login_enter.setText("");
    title_enter.setText("");
}

public boolean emptyAllCheck(){
    String title_str = title_enter.getText().toString();
     String login_str = login_enter.getText().toString();
     String pass_str = password_enter.getText().toString();
     String link_str = link_enter.getText().toString();
     String comm_str = comment_enter.getText().toString();
    if (title_str.equals("") && login_str.equals("") && pass_str.equals("") && link_str.equals("http://www.") && comm_str.equals("")) {
        return true;
    }
    return false;
}
  }

使用这个:

android:configChanges="orientation|screenSize"

在清单文件中添加此代码。无需保存编辑文本变量。

我建议您阅读更多关于Android活动生命周期的内容,它将对您有所帮助。 但是,在配置更改时,您正在进行活动并重新创建,您可以使用回调方法OnsavedInstanceState()保存实例(配置更改时系统将自动调用该实例)

范例

    public   void onSaveInstanceState(Bundle savedInstanceState){

    super.onSaveInstanceState(savedInstanceState);{
        String savedText =  myEditText.getText().toString();
        savedInstanceState.putString("Key", savedText);
   }
现在,在OnCreate方法上重新创建应用程序时,请按如下方式检索保存的文本:

 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
    if(savedInstanceState != null){
                myEditText.setText(savedInstanceState.getString("Key"); 
  //the rest of the code}

瞧,我希望这就是你的意思。

I这就是你要找的:@naz013:第二个活动只有横向模式吗?你能简单地解释一下你的问题吗?这样我就能帮助你了。不,第二个活动同时有两个(纵向和横向布局),但当我改变方向时,应用程序关闭第二个活动并返回到主要活动。-1,抱歉。这应该作为最后一个资源使用,保存
EditText
数据是一个非常简单的操作。谢谢!它工作,数据保存。但是,也许你知道当我旋转到景观时如何修复第二个活动?因为你添加了土地布局,除非你提供一些代码,否则我无法真正知道这里发生了什么!但是,请确保在纵向布局上创建的所有ID都存在于land layout中且相同,同时确保land软件包中的xml文件与纵向布局中的文件名相同。如果仍然不工作,请提供您的代码。我添加了第二个活动的完整代码。还有一件事:当我以横向方向打开第二个活动时,它会自动使用布局栏,但当我转到纵向活动时,它也会关闭并返回Main.Dude,因为在onPause时,您调用finish();正如我在配置更改时所说的,系统将关闭您的活动并重新创建它,它将首先通过调用onPause上的call,然后调用onStop()。。。仍然是onDestroy()方法,但是它不会重新创建活动,因为您在onPause()方法中调用了方法finish()。请尝试删除finish(),然后重试,并让我知道,我希望它会有所帮助哦,谢谢!我从其他活动复制onPause,但忘记了从中删除finish()。