所以我已經看到了這樣做的多個例子,出於某種原因,我無法獲取onSaveInstanceState來正確保存EditText的值。爲什麼我的onSaveInstanceState不能正確保存我的EditText值,因爲從風景回到肖像
我有一個非常簡單的例子,看起來就像下面的圖片。
第一一個TextView的,那麼的EditText後跟一個按鈕。
單擊按鈕時,它將值保存在EditText中,然後將其應用於TextView。
所以問題是它只能工作一次,這意味着我在肖像模式下開始,然後將手機轉到橫向,然後將其保存回到縱向,並且它不會使TextView顯示爲空白。
我的示例代碼如下:
activity_main.xml中
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="50dp"
android:paddingLeft="50dp"
android:paddingRight="50dp"
android:paddingTop="50dp"
tools:context="mydomain.com.savetest.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Default Text"
android:textSize="48sp"
android:id="@+id/textView"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:hint="choose a word"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="SAVE WORD"
android:id="@+id/bu"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"/>
</RelativeLayout>
MainActivity.java
package mydomain.com.savetest;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView mTextView;
private EditText mEditText;
private Button mButton;
private String editTextValue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.textView);
mEditText = (EditText) findViewById(R.id.editText);
mButton = (Button) findViewById(R.id.button);
editTextValue = mEditText.getText().toString();
mTextView.setText(editTextValue);
if(savedInstanceState != null){
mTextView.setText(savedInstanceState.getString("text")); //setting the saved value to the TextView
}
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
editTextValue = mEditText.getText().toString();
mTextView.setText(editTextValue);
}
});
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("text", editTextValue); //saving EditText value
}
}
所以這個整體目標是讓TextView的到保存EditText中的單詞並保持它從縱向切換到橫向。到目前爲止,如果我輸入讓我們說「汽車」它將更新與「汽車」的TextView,並且也將汽車的值甚至轉到風景模式,但是當轉回到肖像時,TextView值消失並且什麼也沒有。我似乎弄清楚這裏發生了什麼,因爲我已經在OnCreate()的開頭將EditText的值設置爲TextView,所以當應用程序再次啓動時,它應該使用保存的值。
OnClickListener()
其刪除變量的初始化可能是你正在做的輸入錯誤。如果您在「EditText」中寫入「car」並旋轉設備。 'TextView'顯示'car',但如果再次旋轉它而沒有在EditText中寫入任何內容,'TextView'將變爲空白,因爲此時的空字符串存儲在'EditText'中,並且您的代碼被複制到' TextView'。 –你也可以試試這個outState.putString(「text」,mEditText.getText()。toString()); – NaserShaikh
@AkashRaghav但是,如果您將設備旋轉爲橫向,則「文本編輯」內的值不會更改,換句話說,旋轉設備時仍會看到汽車。那麼爲什麼它會抓住一個空白值? –