- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
一些背景:
我使用 FragmentStatePagerAdapter 来实现可变数量 fragment 的水平滑动 View 。需要澄清的是, fragment 的数量取决于一些外部数据。由于这种情况,并且 fragment 的数量可能非常大,因此我无法使用适配器的 setOffScreenPageLimit() 方法。
现在,解决问题:
我正在使用 Glide 从网络检索图像列表并将它们显示在我的 fragment 上。这对于第一个 fragment 和第二个 fragment 都适用(因为 setOffScreenPageLimit() 默认为 1)。
但是,第三个 fragment 超出了 setOffScreenPageLimit() 范围。当我尝试检索此 fragment 中的图像时,我从某个调用 fragment 上的 getView() 的内部 Glide 方法中收到 NullPointerException(显然为 null)。我已经确认这实际上是问题所在,例如,当我将离屏限制设置为 4 时,当我尝试检索第 5 个 fragment 上的图像时,应用程序崩溃了。
这是我的 logcat 输出:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.support.v4.app.Fragment.getView()' on a null object reference
at com.bumptech.glide.manager.RequestManagerRetriever.findAllSupportFragmentsWithViews(RequestManagerRetriever.java:189)
at com.bumptech.glide.manager.RequestManagerRetriever.findSupportFragment(RequestManagerRetriever.java:200)
at com.bumptech.glide.manager.RequestManagerRetriever.get(RequestManagerRetriever.java:167)
at com.bumptech.glide.Glide.with(Glide.java:609)
at com.android.miki.quickly.GIFRecyclerAdapter.onViewRecycled(GIFRecyclerAdapter.java:51)
at com.android.miki.quickly.GIFRecyclerAdapter.onViewRecycled(GIFRecyclerAdapter.java:17)
at android.support.v7.widget.RecyclerView$Recycler.dispatchViewRecycled(RecyclerView.java:6056)
at android.support.v7.widget.RecyclerView$Recycler.addViewHolderToRecycledViewPool(RecyclerView.java:5827)
at android.support.v7.widget.RecyclerView$Recycler.recycleViewHolderInternal(RecyclerView.java:5792)
at android.support.v7.widget.RecyclerView$LayoutManager.scrapOrRecycleView(RecyclerView.java:8462)
at android.support.v7.widget.RecyclerView$LayoutManager.detachAndScrapAttachedViews(RecyclerView.java:8447)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:563)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3583)
at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3312)
at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3844)
at android.view.View.layout(View.java:17637)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
at android.view.View.layout(View.java:17637)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079)
at android.view.View.layout(View.java:17637)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1795)
at android.view.View.layout(View.java:17637)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:17637)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079)
at android.view.View.layout(View.java:17637)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:17637)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
at android.view.View.layout(View.java:17637)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
at android.view.View.layout(View.java:17637)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741)
at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585)
at android.widget.LinearLayout.onLayout(LinearLayout.java:1494)
at android.view.View.layout(View.java:17637)
at android.view.ViewGroup.layout(ViewGroup.java:5575)
at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
以下是 GIFRecyclerAdapter 类:
public class GIFRecyclerAdapter extends RecyclerView.Adapter<GIFRecyclerAdapter.GifViewHolder>{
private List<String> gifURLs;
public GIFRecyclerAdapter(List<String> gifURLs) {
this.gifURLs = gifURLs;
}
@Override
public GifViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.single_gif, parent, false);
GifViewHolder vh = new GifViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(GifViewHolder holder, int position) {
holder.setGif(gifURLs.get(position));
}
@Override
public int getItemCount() {
return gifURLs.size();
}
public void setURLs(List<String> gifURLs) {
this.gifURLs = gifURLs;
}
@Override
public void onViewRecycled(GifViewHolder holder){
super.onViewRecycled(holder);
Glide.with(holder.itemView).clear(holder.mImageViewGif);
}
protected class GifViewHolder extends RecyclerView.ViewHolder {
private ImageView mImageViewGif;
private GifViewHolder(View itemView) {
super(itemView);
mImageViewGif = (ImageView) itemView.findViewById(R.id.gif_image_view);
}
private void setGif(String gifURL) {
try{
Glide.with(this.itemView).load(gifURL).into(mImageViewGif);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
任何人都可以给我一些关于为什么会发生这种情况的提示吗?该 fragment 出现在屏幕上,并且 UI 的其余部分工作正常(可以按下按钮等)。但是,使用 Glide 加载图像会使应用程序崩溃。我有一种感觉,这是某种生命周期细节,与 FragmentStatePagerAdapter 如何创建和销毁 fragment 有关,但我不确定。
非常任何帮助。
最佳答案
我认为Glide.with(this.itemView)
这一行有问题。
只需将上下文从 Activity 传递到适配器并使用它来代替 this.itemView
另一个快速解决方法可能是Glide.with(mImageView.getContext())
祝你好运
埃姆雷
关于java - FragmentStatePagerAdapter 与 Glide 一起使用会导致 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44231335/
我正在使用 this example 处理 FragmentStatePagerAdapter . MyAdapter 类实现如下: public static class MyAdapter ext
当我使用 FragmentStatePagerAdapter 扩展我的适配器并使用 fragment 管理器和常量 BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT 传递参数
我在使用 FragmentStatePagerAdapter 管理更改的项目列表时遇到问题。请查来源here . 问题是,当底层列表更改时,并且我调用 notifyDataSetChanged,适配器
我正在实现FragmentStatePagerAdapter并且我想要一个可拖动的标题。每个 fragment 的标题都可以像寻呼机效果一样进行交互。用户可以拖动或浏览所有 fragment 的tit
我已经实现了一个在 viewpager 中显示 fragment 的 Activity 。该 Activity 最初显示给定类型(类型 A)的 5 个 fragment 。每个类型 A fragmen
我知道还有其他几篇关于此主题的帖子,但我想粘贴我的代码,因为我相信其中可能存在导致我出现问题的错误。我的 FragmentStatePagerAdapter 返回了错误的位置,我不确定为什么。 这是我
在我的主要 Activity 中,我有多个 fragment ,您可以通过底部导航进行导航(替换主要 Activity XML 中的 FrameLayout 容器) 其中一个 Fragment 包含一
我有一个 ViewPager+FragmentStatePagerAdapter 主机 Activity ,它让我可以浏览一组 fragment (同一 ItemFragment 类的不同实例),并且
我在我正在开发的应用程序中遇到了 OutOfMemoryErrors,我很难弄清楚如何修复它以及到底是什么问题。我正在使用 FragmentStatePagerAdapter,因为这似乎是最佳/推荐的
我想知道是否可以在没有支持库的情况下使用 FragmentStatePagerAdapter 类或其等效类? 我知道如何使用 native fragment 来代替支持库中的 fragment ,并且
我有一个 ViewPager,其中的页面数是动态的。每个页面都需要从数据库读取并显示该页面的数据集。 我将当前选定的页面标题与数据库“用户名”中的第一个值进行比较,以检查数据是否与该页面相关。 我的
我正在尝试在 View 页面中显示一些 fragment 。我使用从 NavigationDrawer 启动 PlanFragment FragmentTransaction transaction
我正在学习教程 here它使用带有 FragmentStatePagerAdapter 的 TabLayout。一切都很好,除了我需要禁用我的第二个选项卡上的滑动,因为它使用水平滚动。如果所有选项卡都
Noob android 开发者的问题 问题缺失: 我正在尝试实现无限滚动功能,当 FragmentStatePagerAdapter 到达最后一项时通过网络请求加载更多数据,目前我将 getCoun
我有一个 ViewPager,其中包含 Fragment。 ViewPager 有一个适配器 FragmentStatePagerAdapter 适配器的 getItem 方法。 @Override
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我创建了一组水平选项卡,对于每个选项卡内容,它都有一个 View 分页器,它又允许滑动 View 的内容。 我目前正在将其编码为适配器中的 3 个 View ,并返回一个新的内部 fragment ,
我有一个名为 MainActivity 的 Activity ,它有一个 ViewPager 和一个 TabLayout。 ViewPager 有 4(四)个 fragment 绑定(bind)在那里
我想要实现的目标: 带有 ViewPager 的 Activity,显示适配器中对象列表的 fragment (FragmentStatePagerAdapter)。 最初,Activity 将 SQ
我在我的单一 Activity 应用程序上使用嵌套的 FragmentStatePagerAdapter。当前布局是: Activitiy - Login Fragment - Master
我是一名优秀的程序员,十分优秀!