我试图通过自己扩展StackView来自定义Android的AdapterViewAnimator。 AdapterViewAnimator中包含的几个方法对我的子类很有用,所以我把我的子类放在同一个包android.widget
中,希望能获得对它们的访问权,因为它们是包级方法:
void configureViewAnimator(int numVisibleViews, int activeOffset) {
if (activeOffset > numVisibleViews - 1) {
// Throw an exception here.
}
mMaxNumActiveViews = numVisibleViews;
mActiveOffset = activeOffset;
mPreviousViews.clear();
mViewsMap.clear();
removeAllViewsInLayout();
mCurrentWindowStart = 0;
mCurrentWindowEnd = -1;
}
请注意,此方法是一个包级别方法,这就是为什么我的子类也需要在android.widget
中。即便如此,编译器(Java 7)告诉我该方法不存在,因此我不能在我的类中调用我的超类上的方法:
package android.widget;
public class Foo extends AdapterViewAnimator {
public void init(){
super.configureViewAnimator(3,1); // Method does not exist.
}
}
我在这里遗漏了什么吗?为什么我的子类不能调用超类包级方法?
答案 0 :(得分:1)
您可以参考https://groups.google.com/forum/#!msg/android-developers/poC2Xyh-G4w/zKLBPNTryYMJ
“Android.jar现在只包含公共API。如果您针对此jar进行编译,则可以保证您的应用程序将针对未来版本的Android运行。作为从android.jar中删除私有API的过程的一部分,代码被删除了,因为它从未执行过,因此没有理由让SDK更大。“
这解释了为什么找不到configureViewAnimator方法,因为你正在编译android.jar,它只包含公共API(configureViewAnimator是一个包私有方法)