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



为了使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的一部分,并且派生类只有在需要时才用其他东西重写它,这是有原因的吗?那是什么时候?

我认为这是因为Object不能保证是View。文件上甚至写了这么多:

实例化项目

返回表示新页面的对象。这不需要是视图,但可以是页面的其他容器。

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

isViewFromObject()不会崩溃,但它总是返回false,这可能会导致跟踪错误的几个小时的头痛。

即使它是一个视图,并且您使用的是最基本形式的PagerAdapter,我认为这些方法已经变得抽象了,所以1您了解它们,2您习惯于实现它们,并且知道如果不使用视图作为对象该怎么办。

您的视图中可能有需要销毁的对象,如BroadcastReceivers、回调等。虽然不需要来销毁这些对象,但这是一种很好的做法。

相关内容

  • 没有找到相关文章

最新更新