Android轮换错误

时间:2015-02-11 14:59:24

标签: android android-layout android-fragments

我的Android应用程序出现问题。我有两个编辑文本和两个由几个radiobuttons组成的放射性组。我有一个带有碎片的导航抽屉。

当用户键入数字并选择单选按钮时,它会将该数字更改为最终数字。然而,当Android设备旋转为水平时,radiobuttons重置为初始检查,并重置edittext值。我想要它使edittext值和radiobutton保持不变。

public class Fragment1 extends Fragment {

    public static RadioButton button1a;
    public static RadioButton button2a;
    public static RadioButton button3a;
    public static RadioButton button4a;
    public static RadioButton button5a;

    public static RadioButton button1b;
    public static RadioButton button2b;
    public static RadioButton button3b;
    public static RadioButton button4b;
    public static RadioButton button5b;

    public static EditText valueinput;
    public static EditText valueoutput;

    public static double valueInputvar;
    public static double valueOutputvar;

    public static RadioGroup g1, g2;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);

        if (savedInstanceState != null) {
            valueinput.setText(savedInstanceState.getString("input"));
            valueinput.setText(savedInstanceState.getString("output"));
            g1.check(savedInstanceState.getInt("n1"));
            g2.check(savedInstanceState.getInt("n2"));
        }
    }

    @Override
    public void onResume() {
        super.onResume();

    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putString("input", valueinput.getText().toString());
        outState.putString("output", valueoutput.getText().toString());
        outState.putInt("n1", g1.getCheckedRadioButtonId());
        outState.putInt("n2", g2.getCheckedRadioButtonId());
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View content = inflater.inflate(R.layout.fragment1_layout, container, false);

        g1 = (RadioGroup) content.findViewById(R.id.radioGroup1);
        g2 = (RadioGroup) content.findViewById(R.id.radioGroup2);


        button1a = (RadioButton) content.findViewById(R.id.radio1a);
        button2a = (RadioButton) content.findViewById(R.id.radio2a);
        button3a = (RadioButton) content.findViewById(R.id.radio3a);
        button4a = (RadioButton) content.findViewById(R.id.radio4a);
        button5a = (RadioButton) content.findViewById(R.id.radio5a);

        button1b = (RadioButton) content.findViewById(R.id.radio1b);
        button2b = (RadioButton) content.findViewById(R.id.radio2b);
        button3b = (RadioButton) content.findViewById(R.id.radio3b);
        button4b = (RadioButton) content.findViewById(R.id.radio4b);
        button5b = (RadioButton) content.findViewById(R.id.radio5b);

        valueinput = (EditText) content.findViewById(R.id.value1);
        valueoutput = (EditText) content.findViewById(R.id.value2);

        valueinput.setHint("Enter a number");

        valueinput.setText(df.format(1));
        valueoutput.setText(df.format(1000));

        valueInputvar = Double.parseDouble(valueinput.getText().toString());
        valueOutputvar = Double.parseDouble(valueoutput.getText().toString());

        valueInputvar = 0;
        valueOutputvar = 0;

        });


        return content;
    }
}

2 个答案:

答案 0 :(得分:0)

首先,你的onCreate中有一个问题(两者都是valueinput,这是固定版本):

valueinput.setText(savedInstanceState.getString("input"));
valueoutput.setText(savedInstanceState.getString("output"));

您需要知道的第二件事是在onCreateView之前调用onCreate,因为您可以看到here。所以你必须稍微改变你的逻辑。您应该注意到onCreateView也会传递savedInstanceState。检查它是否为null,然后初始化默认值。否则从bundle获取值。

答案 1 :(得分:0)

使用onSaveInstanceState保存值,使用onRestoreInstanceState获取您输入的值。 例如:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    outState.putString("value_name", editText1.getText().toString().trim());
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    editText1.setText(savedInstanceState.getString("value_name").trim());

}
相关问题