2013-09-27 74 views
1

添加變量到savedInstanceState我試圖通過savedInstanceState包保留數據(並最終還原它)爲我的屏幕旋轉時。但數據來自afterTextChanged事件中的editText字段。這裏是我的代碼:從onCreateView方法的片段

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle  savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
View V= inflater.inflate(R.layout.inputscreen, container, false); 
final EditText loan_amount =(EditText)V.findViewById(R.id.inp_loan_amount); 
final EditText the_Rate = (EditText)V.findViewById(R.id.inp_interest_rate); 

if (savedInstanceState != null) 
{ 
loan_amount.setText(savedInstanceState.getString("loanAmount")); 
      } 

loan_amount.addTextChangedListener(new TextWatcher() 
    { 
    @Override 
public void onTextChanged(CharSequence s, int start, int before, int count) {} 
@Override 
public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 
@Override 
public void afterTextChanged(Editable s) { 
    savedInstanceState.putString("loanAmount","Test Message"); 
} 
} 

});

在上面的代碼中,我僅使用「測試消息」代替EditText字段中的實際字符串,只是爲了簡單起見。錯誤是「不能引用在不同方法中定義的內部類中的非最終變量」錯誤,因爲我指的是內部類中的savedInstanceState包。但EditText字段在OnCreateView中的膨脹函數之前不存在,所以我需要在這裏保存數據。將「final」添加到savedInstanceState包給了我一個NullException錯誤。

所以基本上我需要知道如何成功地將內部類(addTextChangedListener)生成的數據保存到savedInstanceState Bundle中,以便在屏幕旋轉後恢復它。如果有一個簡單的方法來做到這一點,我是一個白癡!請告訴我。

回答

0

使用here的正確方法。

+0

這是處理屏幕旋轉的正確方法嗎?我認爲這是onSavedInstanceState事件的目的。您提供的鏈接沒有具體提及屏幕方向更改。 – user1723280

2

如果你沒有做任何事情複雜,您還可以使用XML屬性上的EditText保存您的文本:

android:freezesText="true" 
+0

不幸的是,EditText字段需要不斷接受新的輸入。 – user1723280

0

你可以做的是將其保存在saveInstanceState方法和方向更改後resotre它。類似於下面的代碼。

EditText loan_amount; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    View v= inflater.inflate(R.layout.inputscreen, container, false); 

    loan_amount =(EditText)v.findViewById(R.id.inp_loan_amount); 

    if (savedInstanceState != null) 
    { 
     loan_amount.setText(savedInstanceState.getString("loanAmount")); 
    } 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putString("loanAmount", loan_amount.getText().toString()); 
} 

如果有任何查詢可以隨意問。

相關問題