2015-04-27 11 views
0

У меня есть приложение для Android, которое позволяет пользователю динамически добавлять свои собственные кнопки в макет. Мне нужно сделать так, чтобы после закрытия и повторного открытия приложения эта динамически добавленная кнопка вернется к макету. Вместо загрузки макета по умолчанию.Сохранение целого состояния активности

В настоящее время я динамически добавлять кнопки через ActionBar приложения:

if (id == R.id.add_button) 
     { 
     String string = "Adding Button in Progress"; 
     Toast.makeText(getApplicationContext(), string, Toast.LENGTH_SHORT).show(); 

     Button myButton = new Button(this); 
     myButton.setText("Button"); 

     RelativeLayout layout = (RelativeLayout)findViewById(R.id.Layout1); 
     layout.addView(myButton); 

     //myButton.setVisibility(View.VISIBLE); 
     return true;  
     } 

Это создает кнопку штраф, однако, когда приложение закрыто и вновь открыт, он запускает на раскладку по умолчанию.

Я провел некоторое исследование по тому, как приложение сохраняет и перезагружает обновленный макет. Кажется, мне нужно использовать onSaveInstanceState. Вот то, что я до сих пор с точки зрения пытаются сохранить макет:

@Override 
    public void onSaveInstanceState(Bundle savedInstanceState) { 
    // Save the app state here: 
    savedInstanceState.putAll(savedInstanceState); 

    super.onSaveInstanceState(savedInstanceState); 
    } 

И вот что у меня есть с точки зрения пытаются «перезагрузить/восстановить», сказал макет. Обратите внимание, что я не использую onRestoreInstanceState, а я делаю это через OnCreate метод:

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


    // Check whether we're recreating a previously destroyed instance 
    if (savedInstanceState != null) { 
     // Restore value of members from saved state 
     //savedInstanceState.get(savedInstanceState); 
     } 

    else 
     { 
     //initialize members with default values for a new instance 
     setContentView(R.layout.activity_main); 
     } 
    } 

Я не уверен, если я сохранения/загрузки правильно, но какие-либо советы о том, как я могу решить эту задачу был бы весьма признателен.

Спасибо за ваше время!

P.S. Я все еще довольно новый участник, поэтому я не мог комментировать/задавать вопросы о существующих потоках.

Я знаю, что есть много информации о попытке загрузить/сохранить макеты, однако в моем случае мне нужно, чтобы она сохранила кнопку, а не строку текста пользователя. Другими словами, это не фиксированное значение, которое мне нужно сохранить. Если пользователь добавляет n кнопок, когда приложение выйдет и перезагрузится, оно должно иметь те же 3 кнопки.

+0

Сочетание ViewStub & SharedPreferences решит вашу проблему. – VVB

+0

@VVB: \t благодарит за ответ. Раньше я пытался посмотреть в SharedPreferences, но был отвергнут из-за того, что я не уверен, как представить состояние активности (а именно недавно добавленные кнопки) в качестве пары ключ-значение, которая, как представляется, требует SharedPreferences. – organizedchaos

ответ

0

Сохраненное состояние экземпляра - это пара ключевых слов о вашей деятельности. В документации четко сказано, что она уничтожается, когда приложение закрыто (нажатие кнопки возврата или сама система отключает приложение). Это полезно только при навигации в приложении или изменении ориентации.

Одним из решений является создание общего предпочтения деталей, которые требуется вашему приложению, чтобы идентифицировать данную структуру, состоящую из динамического содержимого. Извлеките значения, когда вы открываете приложение и код в соответствии с ним.

Другие решения - использовать базы данных или файлы для хранения данных о вашем динамическом контенте.

+0

Одна вещь, которую я, похоже, не понимал в подходе Shared Preference, заключается в том, как представить новую добавленную кнопку в качестве пары ключ-значение. – organizedchaos

+0

Как и в методах, которые вы можете использовать, например putBoolean и putInt, которые хранят значения, используя пары key-val. Но насколько я знаю, нет никакого способа представить Button как String, Boolean, Integer и т. Д.? – organizedchaos

+0

не сохраняйте всю кнопку в качестве общих настроек. Сохраняйте ее атрибуты или свойства, а затем визуализируйте кнопку с использованием данных. –