Асинхронное обновление представления фрагмента: ImageView не обновляется, но другие дочерние элементы обновляются в представлении

У меня есть ViewPager, который использует фрагменты. Фрагменты содержат только макет кадра с ImageView и большим TextView в качестве заголовка прямо сейчас. Каждое изображение фрагмента загружается асинхронно.

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

метод onCreateView

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // Inflate the layout containing a title and body text.
    ViewGroup rootView = (ViewGroup) inflater.inflate(
            R.layout.fragment_sliding, container, false);
    rootView.setId(imgId);
    return rootView;
}

Когда мой асинхронный загрузчик загружает информацию

    @Override
public void onLoadFinished(Loader<DImage> arg0, DImage arg1) {
    View v = getView();

    ImageView im = (ImageView) v.findViewById(R.id.fragment_image);
    im.setImageBitmap(arg1.image);
    TextView tv = (TextView) v.findViewById(R.id.fragment_image_title);
    tv.setText(arg1.id + "");

}

Полученный результат отличается для всех фрагментов.. также текст textview отображается по-разному, когда я перемещаю изображение.. Я попытался установить растровое изображение на нулевое, а затем обновить новым растровым изображением.. но это не работает.. любая подсказка, где я ошибаюсь??

РЕДАКТИРОВАТЬ: добавление XML фрагмента

    <ImageView
    android:id="@+id/fragment_image"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:keepScreenOn="true"

    />

<TextView
    android:id="@+id/fragment_image_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:textSize="30dp" />

person Kamal    schedule 22.04.2013    source источник
comment
Я пытался понять это часами... +1! В моем случае я могу установить Text в TextView во фрагменте из ListFragment, объявив TextView статически во фрагменте сведений, но setImageResource ImageView не может быть статически обновлен таким же образом, и я получаю NPE.. та же проблема ?   -  person whyoz    schedule 24.04.2013
comment
@whyoz повезло с изменением imageView ??   -  person Kamal    schedule 25.04.2013
comment
Я рад, что вы ответили... надеюсь, это поможет вам, но моя проблема заключалась в том, что у меня был android:tag=@+id/theImageID, что должно было произойти, когда я копировал и вставлял... вы заметите, что вместо этого должен быть идентификатор тега, поэтому я получил NPE ... простой, но обычно именно простой вызывает больше всего проблем, потому что его так легко не заметить ... опубликуйте свой XML, и это может помочь.   -  person whyoz    schedule 25.04.2013
comment
добавили XML.. XML выглядит довольно хорошо для меня.. я не получаю никаких нулевых указателей.. никаких предупреждений/ошибок в logcat.. если я добавлю еще несколько текстовых представлений, все они меняются, когда я перемещаю изображения.. только картинка осталась прежней..   -  person Kamal    schedule 26.04.2013


Ответы (1)


У меня тоже была такая же проблема, и я потратил пару часов на поиск решения. Надежда помогает другим это решение.

Я видел, что Fragment проходит через onCreateView, и я загружал изображения только тогда, когда фрагмент был виден в AsyncTask. И я проверил, что onPostExecute битмапы установлены на ImageView, но тщетно. ImageView показал изображение только в первый раз. Даже invalidate() не помогло.

После некоторого поиска я обнаружил, что FragmentPagerAdapter повторно создает фрагменты. А для больших данных рекомендуется использовать: FragmentStatePagerAdapter. Он использует меньше памяти и уничтожает фрагменты.

Подробнее читайте здесь: FragmentStatePagerAdapter

person krisztian    schedule 03.09.2013