2015-10-13 4 views
0

Мое приложение использует одно действие и множество фрагментов, действие, которое расширяет AppCompatActivity, раздувает файл xml, который имеет LinearLayout среди других ViewGroups, цель этого LinearLayout состоит в том, чтобы удерживать 3 кнопки, а не все они видны при запуске.восстановление текста кнопки и видимости при изменении активности

В коде я изменяю вид LinearLayout и вид и тексты некоторых его кнопок в зависимости от действия, выполняемого в текущем фрагменте. Однако их состояние не поддерживается, когда операция восстанавливается после нажатия клавиши домашнего телефона. Сохранение видимости и текста каждой кнопки каждый раз, когда вы попадаете в SharedPreferences, слишком скучно, поэтому я попробовал код ниже, но не смог.

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

    if (mMainButtons_LL != null) { 
      mMainButtons_LL = (LinearLayout) savedInstanceState.getSerializable("mainButtons"); 
     } else { 
      mMainButtons_LL = (LinearLayout) findViewById(R.id.main_buttons_LL); 
     } 
    } 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putSerializable("mainButtons", (Serializable) mMainButtons_LL); 

} 

ответ

0

Изменить код на что-то вроде этого:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.id.your_layout); // << replace your layout id here 
    mMainButtons_LL = (LinearLayout) findViewById(R.id.main_buttons_LL); 

    if (savedInstanceState != null) { 
     mMainButtons_LL.setVisibility(savedInstanceState.getInt("visibility")); 
     mMainButtons_LL.setText(savedInstanceState.getString("text"); 
    } 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putInt("visibility", mMainButtons_LL.getVisibility()); 
    outState.putString("text", mMainButtons_LL.getText.toString()); 
} 
+0

Язь жалуется, что savedInstanceState.getInt ("видимость") должен быть один из view.Visible, view.Invisible, view.Gone –

+0

мкм , Я не уверен в жалобе, но вы всегда можете использовать switch/case, когда 'putInt' и' getInt' ставить/получать 'View.VISIBLE' и так далее. Но вы понимаете разницу между моим кодом и вашим. – Leo

+0

Вы имели в виду: int vis = savedInstanceState.getInt ("mainBtVis"); mMainButtons_LL.setVisibility (vis == 0? View.VISIBLE: vis == 4? View.INVISIBLE: View.GONE); и сделать это для всех детей в LinearLayout? –

Смежные вопросы