我试图通过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");
}
}
});
在上面的代码中,为了简单起见,我使用“Test Message”代替EditText字段中的实际字符串。错误是“不能引用在不同方法中定义的内部类中的非final变量”错误,因为我指的是内部类中的savedInstanceState包。但是在OnCreateView中的inflate函数之前EditText字段不存在,所以我需要在这里保存数据。将“final”添加到savedInstanceState包中会导致出现NullException错误。
所以基本上我需要知道如何成功地将内部类(addTextChangedListener)生成的数据保存到savedInstanceState Bundle,以便在屏幕旋转后恢复它。如果有一个简单的方法,我是一个白痴!请告诉我。
答案 0 :(得分:2)
如果您没有做任何复杂的事情,您还可以使用EditText上的xml属性来保存文本:
android:freezesText="true"
答案 1 :(得分:0)
使用here中的正确方法。
答案 2 :(得分:0)
你可以做的是将它保存在onsaveInstanceState方法中,并在方向改变后恢复它。类似于下面的代码。
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());
}
如果有任何查询可以随意询问。