【问题标题】:Fragment view async update: ImageView not updating but other childs are getting updated in the view片段视图异步更新:ImageView 未更新,但视图中的其他子项正在更新
【发布时间】:2013-04-22 22:28:17
【问题描述】:

我有使用 Fragments 的 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" />

【问题讨论】:

  • 我已经尝试了好几个小时...+1!在我的情况下,我可以通过在“详细信息”片段中静态声明 TextView 来在 ListFragment 的片段中的 TextView 上 setText,但 ImageView 的 setImageResource 不能以相同的方式静态更新,我得到一个 NPE ..同样的问题?
  • @whyoz 更改 imageView 运气好吗??
  • 我很高兴你回复了......希望这对你有帮助,但我的问题是因为我有 android:tag="@+id/theImageID" 这一定是我复制和粘贴时发生的。 .你会注意到它应该是“id”而不是“tag”,这就是为什么我得到一个 NPE ..simple,但它通常是最简单的,因为它很容易被忽略......发布你的 XML这可能会有所帮助。
  • 已经添加了 XML.. XML 对我来说看起来很不错.. 我没有得到任何 Null 指针.. 在 logcat 中没有警告/错误.. 如果我添加更多的文本视图,它们都是当我滑动图像时改变..只有图像保持不变..

标签: android android-fragments android-loadermanager


【解决方案1】:

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

我看到Fragment 正在通过onCreateView,并且我只在片段在AsyncTask 中可见时才加载图像。我检查了onPostExecute 的位图设置为ImageView,但徒劳无功。 ImageView 仅在第一次显示图像。甚至 invalidate() 也无济于事。

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

在这里阅读更多: FragmentStatePagerAdapter

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多