0

我正在尝试通过自己扩展AdapterViewAnimator来自定义实现 Android 的StackView。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.
    }
}

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

4

1 回答 1

1

你可以参考https://groups.google.com/forum/#!msg/android-developers/poC2Xyh-G4w/zKLBPNTryYMJ

“Android.jar 现在只包含公共 API。如果您针对此 jar 进行编译,则可以保证您的应用程序将在未来版本的 Android 上运行。作为从 android.jar 中删除私有 API 的过程的一部分,代码将被删除,因为它从未执行过,所以没有理由因为它而使 SDK 变得更大。”

这解释了为什么在您针对 android.jar 进行编译时找不到方法 configureViewAnimator,其中仅包含公共 API(configureViewAnimator 是包私有方法)

于 2015-04-17T09:58:34.187 回答