这仅仅是自定义寻呼机适配器实现的样板代码吗?

时间:2018-10-31 20:55:50

标签: android android-viewpager android-pageradapter

为了使PagerAdapter实现正常工作,应在定制适配器派生类中实现以下内容。

 @Override
 public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {  
        return view == object;  
 }  

 @Override
 public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {  
        container.removeView((View) object);  
    }  
}  

在我看来,这只是样板代码。
为什么要在派生类中这样做?是否有原因导致该代码不属于PagerAdapter的一部分,并且派生类仅在(如果需要)时才使用其他内容覆盖它?那会是什么时候?

1 个答案:

答案 0 :(得分:1)

我认为这是因为不能保证对象是视图。该文档甚至说了很多:

  

instantiateItem

     

返回一个代表新页面的对象。这不必是View,但可以是页面的其他容器。

如果object参数不是视图,则destroyItem()将失败并导致您的应用崩溃。

isViewFromObject()不会崩溃,但始终返回false,这可能会导致数小时的尝试跟踪错误的麻烦。

即使它是一个View,并且您以其最基本的形式使用PagerAdapter,我也认为这些方法已被抽象化,因此1知道它们,2习惯于实现它们并知道如果您不使用视图作为对象,该怎么办。

您的View中可能有需要销毁的对象,例如Br​​oadcastReceivers,回调等。虽然不需要销毁,但这是一个好习惯。