扩展StackView或AdapterViewAnimator似乎是不可能的

时间:2015-03-04 17:47:42

标签: java android inheritance stackview

我试图通过自己扩展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.
    }
}

我在这里遗漏了什么吗?为什么我的子类不能调用超类包级方法?

1 个答案:

答案 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是一个包私有方法)