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 を大きくする理由はありません。」

これは、パブリック API のみを含む android.jar に対してコンパイルしているため、configureViewAnimator メソッドが見つからない理由を説明しています (configureViewAnimator はパッケージのプライベート メソッドです)。

于 2015-04-17T09:58:34.187 に答える