Вопрос

Привет, я работаю с пейджером и фрагментами. Я хотел бы переопределить изменения ориентации, чтобы метод OncreateView не работал каждый раз, когда изменяется ориентация. Это связано с тем, что в моем приложении запускается многое, что заставляет ориентацию медленно изменяться. Кроме того, на моем сервере проверяются, и что не так, поэтому на самом деле нет причин для того, чтобы работать только потому, что ориентация изменилась.

Вот что я настроил до сих пор

У меня есть это на манифесте

 android:configChanges="orientation|keyboardHidden"

А потом я использую это в своем фрагменте

@Override
public void onConfigurationChanged(Configuration newConfig) {
  super.onConfigurationChanged(newConfig);
    getLayoutInflater(getArguments()).inflate(R.layout.main, null, false);
    Toast.makeText(getActivity(), "changed orientation", Toast.LENGTH_LONG).show();
}

Когда я запускаю приложение и ориентацию переключения, я вижу тост -шоу, но макет никогда не меняется на ландшафт. Поэтому я решил, что, возможно, Android просто не признал, что он был в ландшафте, так как я перевернул его, но сменить макет на что -то нелепо В результате я знаю, что что -то не так с тем, как я раздуваю планировку.

Любая помощь при изменении макета при изменении ориентации в ViewPager будет очень оценена.

Благодарю вас!

Это было полезно?

Решение

1) Вы должны поместить все свои подпрограммы проверки сервера и другие одноразовые операции в Fragment Oncreate (), а не OncreateView (). Если вам нужно показать какой -то экран «Загрузка ...» во время загрузки, то я бы порекомендовал использовать Фрагментируемость чтобы надуть макет хотя бы Framelayout который содержит тип «загрузка ...» графики. Во -первых, фрагментируемость будет работать OnCreate (), в котором сначала раздут начальный вид, а затем экземплят фрагмент. Поместите код проверки сервера в фрагменте oncreate (), а затем раздувайте любое представление для этого фрагмента в методе его oncreateView (). Вот образец из одного из моих проектов, который инициализирует кнопку микрофона, которая действительно является фрагментом:

<FrameLayout
       android:id="@+id/recorder_mic_fragment"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       />

Затем фрагмент микрофона фактически создается следующим кодом Java:

// make the Mic button
FragmentManager fragMgr = getFragmentManager();
FragmentTransaction xact = fragMgr.beginTransaction();
if (null == fragMgr.findFragmentByTag(FRAG_TAG)) {
    xact.add(R.id.mic_button_frame, MicFragment.newInstance(queryType), FRAG_TAG).commit();
}

Frag_tag на самом деле уникальный имя тега, которое вы даете экземпляру фрагмента, который отличается от R.Id фрагмента. Таким образом, вы можете использовать findfragmentbytag (), чтобы убедиться, что фрагменты правильно создавались во всех местах, которые вам нужны.

Вы можете немного помассировать этот код, если хотите загрузить фрагменты в фрагментах, например, как на самом деле работает мое приложение. Если у вас есть фрагмент, который раздут один из нескольких возможных представлений, используйте оператор IF, чтобы выбрать соответствующий идентификатор кадра и обозначить уникальный Frag_TAG. Я бы посоветовал использовать различные R.ID для каждого Framelayout, который вы создаете для фрагмента. (Например, если этот фрагмент может раздуть различные представления для информации, гула и текста, то мои названия тегов для каждого фрагмента микрофона будут MetaMicButton, Хумбиттон, а также Тексты песен. Анкет Мне также нужно выбрать между r.id.meta_mic_button_frame и т. Д.)

2) Когда вы переключаетесь между режимами портрета и ландшафта, вам необходимо определить различные макеты XML в папках Res/Layout и Res/Layout_land. (Или вы можете сделать Res/Mayout и Res/Mayout_port, если вы хотите считать ландшафтный режим по умолчанию). Пожалуйста, проверьте эту ссылку: http://developer.android.com/guide/topics/resources/providing-resources.html#alternativeresources Вы можете определить различные макеты на основе размера экрана, языка, режима док -станции, ночного режима и любой их комбинации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top