当我的屏幕旋转时,我试图通过 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,以便在屏幕旋转后恢复它。如果有一个简单的方法来做到这一点,我是个白痴!请告诉我。