2016-07-12 1 views
0

У меня есть класс Adapter и MainActivity. Класс Adapter отображает список имен детей и рядом с именами, он отображает time, которые они прибыли в школу. Проблема в том, что при повороте в ландшафт, значения time теряются.android: configChanges = "ориентация | screenSize" меняет вид моего макета

я считал добавление в моем манифесте под MainActivity

android:configChanges="orientation|keyboardHidden|screenSize" 

Что происходит в том, что значения времени не теряются в ландшафтном режиме, но внешний вид макета появляется такой же, как в портретном режиме. В реальности макет ландшафта немного отличается от макета портрета.

Что мне делать в этом случае, чтобы получить значения time, а также сохранить внешний вид ландшафта.

ответ

1

Есть 2 варианта:

  1. использование onSaveInstanceState(Bundle outState) метод в вашей деятельности или фрагмента - сохранить данные и восстановить их после вращения (в onCreate(Bundle savedInstanceState) или onRestoreInstanceState(Bundle savedInstanceState))

Пример:

@Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putSerializable("time_data", (Seriazable) mTimeList); 
    } 

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

     ... 

     if (savedInstanceState != null) { 
      // restore value of members from saved state 
      mTimeList = savedInstanceState.getSerializable("time_data"); 
     } 

     ... 
    } 
  1. use android: configИзменить как вы alrea ду использование для обработки изменений от себя, но раздувать макет ландшафта после поворота

Пример:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    // Checks the orientation of the screen 
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show(); 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){ 
     Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show(); 
    } 
} 

Я предпочитаю первый вариант, а также это предлагаемый в Android guide.

+0

Thankyou :) если я использовать второе решение ваших, в onConfigurationChanged() в случае случае, мне нужно установить макет землю XML для класса адаптера. Как это сделать – Mark023

+0

Вы можете проверить этот StackOverflow [ответ] (http://stackoverflow.com/a/17050108/1423876), связанный с инфляцией макета после изменений конфигурации. Есть еще несколько вопросов по StackOverflow, связанных с инфляцией макета, поэтому вы можете проверить их и использовать то, что более применимо для вашей цели. – comrade

0

Вы можете просто установить ориентацию экрана на портретную, чтобы ваша перкулярная активность не могла вращаться. (если вы хотите) как таким образом:

<activity android:name=".MainActivity" 
      android:screenOrientation="portrait"> 
    </activity>