Сохранение и загрузка состояния Activity

Рейтинг: 7Ответов: 1Опубликовано: 18.02.2015

Возможно ли в Android сохранить разметку с значениями в файл, чтобы после можно было её из этого файла потом загрузить?

Допустим, у меня есть main.xml, там 2 Button и 20 TextView. Для каждого TextView я программно написал текст (каждый текст около 20 слов).

Можно ли как-нибудь сохранить это всё и запустить в новом Activity? Просто такой же эффект возникает при повороте экрана, эти два метода уже не работают. ((

onRetainNonConfigurationInstance()
getLastNonConfigurationInstance()

Ответы

▲ 15Принят

Если я правильно понял, вам надо куда-то сохранить строки из TextView и восстановить их после поворота активити или передать в другую активити. Для этого есть класс Bundle.

В него можно сохранить ваши строки, а потом извлечь.

  1. Для сохранения в текущей активити используйте метод onSaveInstanceState(Bundle state) активити:

    @Override
    public void onSaveInstanceState(Bundle state) 
    {
        //находим TextView
        TextView tV=(TextView )this.findViewById(R.id.yours_text_view_id);
        String textFromTextViewToSave=tv.getText();
        state.putString("str1", textFromTextViewToSave);
    }
    
  2. Для восстановления этого текста при повороте активити в onCreate пишем

    @Override
    public void onCreate(Bundle state) 
    {
        //находим TextView
        TextView tV=(TextView )this.findViewById(R.id.yours_text_view_id);
        String textFromTextViewToSave=state.getString("str1");
        tV.setText(textFromTextViewToSave);
    }
    
  3. Для передачи этих значений в другую активити действуйте по аналогии, сохраняя строки из TextView в Bundle Intent-а, коим запускаете эту активити:

    Intent intent=new Intent(context, YourAnoterActivity.class);
    intent.putStringExtra("str1", textFromTextViewToSave);
    context.startActivity(intent);
    

    , а восстанавливая их в OnCreate этой активити так:

    @Override
    public void onCreate(Bundle state) 
    {
         String fromIntent=this.getIntent.getString("str1");
    }
    
  4. Ещё можно сохранять в SharePreferences. Так вы не будете зависеть от жизненного цикла.

    //сохраняем строку в файл внутренней директории приложения
    SharePreferences pref=PreferenceManager.getDefaultSharedPreferences(context);
    pref.edit().putString("key", "value").commit();
    
    //получаем ранее сохранённые данные
    String savedData=pref.getString("key");