1

当我的屏幕旋转时,我试图通过 savedInstanceState 包保留数据(并最终恢复它)。但是数据来自 afterTextChanged 事件中的 editText 字段。这是我的代码:

@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 包。但是在 OnCreateView 中的 inflate 函数之前并不存在 EditText 字段,所以我需要将数据保存在这里。将“final”添加到 savedInstanceState 包中会给我一个 NullException 错误。

所以基本上我需要知道如何成功地将内部类(addTextChangedListener)生成的数据保存到savedInstanceState Bundle,以便在屏幕旋转后恢复它。如果有一个简单的方法来做到这一点,我是个白痴!请告诉我。

4

3 回答 3

2

如果您没有做任何复杂的事情,您还可以使用 EditText 上的 xml 属性来保存您的文本:

android:freezesText="true"
于 2013-09-27T03:03:12.010 回答
0

这里使用正确的方法。

于 2013-09-27T00:41:47.457 回答
0

您可以做的是将其保存在 saveInstanceState 方法中,并在方向更改后重新设置。类似于下面的代码。

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());
}

如果有任何疑问,请随时询问。

于 2013-11-18T07:12:09.770 回答