Android: исчезает фон рисования RelativeLayout - PullRequest
3 голосов
/ 11 октября 2011

У меня есть макет xml для фрагмента (android.support.v4.app.Fragment).Когда этот фрагмент добавлен в первый раз, фон для рисования отображается нормально.Но когда этот фрагмент заменяется другим фрагментом, а затем снова возвращается обратно (путем создания нового экземпляра и использования FragmentTransaction.replace ()), фоновый рисунок исчезает (, но не во всех случаях , см. Ниже).).Вот формат XML для фрагмента:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <include layout="@layout/footer_photos" />
    <RelativeLayout
        android:id="@+id/pageLayout"
        android:background="@drawable/body_background2"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@id/footer">
        <ImageView
            android:id="@+id/page"
            android:layout_height="500dp"
            android:layout_width="400dp"
            android:layout_centerInParent="true"
            android:background="#FFF" />
    </RelativeLayout>
</RelativeLayout>

Рассматриваемый фон находится в RelativeLayout с идентификатором "pageLayout".

Возможные подсказки:

  • Когда я удаляю там ImageView, фоновый рисунок хорошо отображается.
  • Другие фрагменты имеют похожую разметку xmls (с тем жеможно рисовать в фоновом режиме), но без ImageViews внутри них, и они работают нормально.
  • Один из этих фрагментов имеет WebView и кнопки внутри него, и фон этого этого прекрасно отображается.
  • Послепри замене «фрагмента WebView» на рассматриваемый фрагмент фон хорошо отображается (!?).

РЕДАКТИРОВАТЬ: та же проблема постоянно возникает, если изображение загружается в ImageView, а затем диалоговое окнотематическая деятельность запускается поверх нее, затем завершается.Мое решение ниже исправляет оба случая.

Ответы [ 4 ]

1 голос
/ 28 марта 2012

Нашел лучшее решение, чем мое последнее. В onResume () для фрагмента просто нужно сделать:

    getView().post(new Runnable() {
        @Override
        public void run() {
            View v = getView();
            if (v != null)
                v.invalidate();
        }
    });

Это вызывает мерцание, но, по крайней мере, кажется, что оно работает последовательно.

0 голосов
/ 11 октября 2011

У меня была похожая проблема.С относительной разметкой были imageView и textView.Я решил с вызовом метода takeToFront:

myImageView.bringToFront();

Надеюсь это помогло.

0 голосов
/ 18 октября 2011

Хорошо, я исправил эту проблему, пытаясь исправить другую проблему.Проблема была решена путем вызова setLayoutParams () для page ImageView (с любыми параметрами макета).Это заставило фон pageLayout RelativeLayout снова появляться.Причина проблемы остается неизвестной ...

0 голосов
/ 11 октября 2011

Фрагменты заменяются вместе с их фоном, что означает, что

  1. при замене фрагмента A на фрагмент B фон меняется на фон фрагмента B.

  2. Если вы не дадите фон фрагменту B, вы можете увидеть фрагмент B над фрагментом A.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...