为了使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、回调等。虽然不需要来销毁这些对象,但这是一种很好的做法。