片段视图异步更新:ImageView未更新,但其他子节点正在视图中更新

时间:2013-04-22 22:28:17

标签: android android-fragments android-loadermanager

我有ViewPager使用Fragments ..片段现在只包含一个带有ImageView的framelayout和一个大的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文本显示不同..我尝试将图像位图设置为null nd然后使用新位图更新..但它不起作用..我出错的任何线索?

编辑:添加片段的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" />

1 个答案:

答案 0 :(得分:1)

我也有同样的问题,并花了几个小时找到解决方案。希望帮助其他人这个解决方案。

我看到Fragment正在经历onCreateView,我只在片段在AsyncTask中可见时才加载图像。我检查了onPostExecute位图设置为ImageView,但是徒劳无功。 ImageView仅首次显示图片。即使invalidate()没有帮助。

经过一番搜索,我发现FragmentPagerAdapter重新实例化了片段。建议使用更大的数据:FragmentStatePagerAdapter。它使用更少的内存并破坏碎片。

在这里阅读更多内容: FragmentStatePagerAdapter