Данные из textView удаляются после поворота экрана после того, как я реализовал onSaveInstance и onRestoreInstance

Я все протестировал и потратил последние 3 часа на исправление этой ошибки. Я не знаю почему, но мое приложение удаляет все данные из textView. Я сделал onSaveInstance и onRestore, но это та же проблема.

Я знаю, что могу решить эту проблему с помощью onCreate, но я не совсем то, что мне нужно делать.

public class MainActivity extends AppCompatActivity {

    EditText et_min,et_max;
    Button button;
    TextView tv_output;

    Random r;
    int min, max, output;
    static final String OUT_PUT = "output";



    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        if (output!= 0){
            savedInstanceState.putInt(OUT_PUT, 0);
        }
        super.onSaveInstanceState(savedInstanceState);
    }
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        output = savedInstanceState.getInt(OUT_PUT);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        r = new Random();
        et_max = (EditText) findViewById(R.id.et_max);
        et_min = (EditText) findViewById(R.id.et_min);
        button = (Button) findViewById(R.id.button);
        tv_output = (TextView) findViewById(R.id.tv_output);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String tempMin, tempMax;
                tempMin = et_min.getText().toString();
                tempMax = et_max.getText().toString();
                if (!tempMin.equals("") && !tempMax.equals(""))//ovde stavljam ih u poziciju gde su slobodni za pisanje
                    min = Integer.parseInt(tempMin);
                    max = Integer.parseInt(tempMax);//ova dva sluze kako bi pretvorili stringove u intove za potrebe dole methoda
                if (max > min) {
                    output = r.nextInt((max - min) + 1) + min;//nextInt sluzi kako bi dao random broj izmedju dva broja u ovom slucaju min i max
                    tv_output.setText("" + output);
                }
            }

        });
    }
}

person Mihajlo Milosevic    schedule 04.02.2019    source источник


Ответы (1)


Да, вам нужно использовать onSaveInstanceState. Эти методы сохранят ваши переменные, которые у вас есть в ваших текстовых представлениях или что-то еще. В вашем случае вам нужно объявить свои представления, такие как findViewById в onSaveInstanceState и onRestoreInstanceState. Вы можете попробовать что-то вроде этого, этот код работает:

public class MainActivity extends AppCompatActivity {

Button Btn;
TextView textView;
String cnt = "";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Btn = (Button) findViewById(R.id.button);
}

public void onBtnClick(View view) {
    textView = (TextView) findViewById(R.id.textView);
    textView.setText("Hehe");
}

protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    textView = (TextView) findViewById(R.id.textView);
    cnt = (String) textView.getText();
    outState.putString("count", cnt);
}

protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    cnt = savedInstanceState.getString("count");
    textView = (TextView) findViewById(R.id.textView);
    textView.setText(cnt);
}
}
person Valentin    schedule 04.02.2019
comment
Большое спасибо, все работает. - person Mihajlo Milosevic; 04.02.2019