Android:xml中的自定义ViewPager

use*_*171 2 java android android-custom-view android-layout android-viewpager

我试图简单地覆盖ViewPager的一个方法,然后在XML中使用我的自定义类,但每次运行它时我的应用程序都会崩溃.

我的自定义类:

public class MainMenuViewPager extends ViewPager {
    private final String[] TITLES = {"One", "Two","Three", "Four", "Five"};

    public MainMenuViewPager(Context context) {
        super(context);
    }

    public MainMenuViewPager(Context context, AttributeSet attrs) {
       super(context, attrs);
    }

    @Override
    public void setCurrentItem(int item) {
        super.setCurrentItem(item);
        actionBar.setTitle(TITLES[item]);
    }
}
Run Code Online (Sandbox Code Playgroud)

在XML中:

 <com.example.android.example.TestActivity.MainMenuViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/tabs" />
Run Code Online (Sandbox Code Playgroud)

我在运行时收到ClassNotFoundException.

唯一值得注意的是这个Custom ViewPager嵌套在另一个类中.这是一个问题吗?

编辑: 仍在努力获取运行时logcat异常,但是当我在Eclipse中进行图形化布局并查看错误日志时,我看到:

java.lang.NoSuchMethodException: com.whatspoppin.android.whatspoppin.TestActivity$MainMenuViewPager.<init>(android.content.Context, android.util.AttributeSet)
at java.lang.Class.getConstructor0(Unknown Source)
at java.lang.Class.getConstructor(Unknown Source)
at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.instantiateClass(ProjectCallback.java:347)
at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.loadView(ProjectCallback.java:179)
at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:207)
at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:135)
at android.view.LayoutInflater.rInflate_Original(LayoutInflater.java:755)
at android.view.LayoutInflater_Delegate.rInflate(LayoutInflater_Delegate.java:64)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:727)
at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
at android.view.LayoutInflater.inflate(LayoutInflater.java:373)
Run Code Online (Sandbox Code Playgroud)

并在运行时:

08-07 16:43:30.028: E/AndroidRuntime(1723): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.android.example.TestActivity.MainMenuViewPager" on path: /data/app/com.example.android.example-2.apk
08-07 16:43:30.028: E/AndroidRuntime(1723): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.android.example.TestActivity.MainMenuViewPager" on path: /data/app/com.example.android.example-2.apk
08-07 16:43:30.028: E/AndroidRuntime(1723): Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.android.example.TestActivity.MainMenuViewPager" on path: /data/app/com.example.android.example-2.apk
08-07 16:43:30.028: E/AndroidRuntime(1723):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:65)
08-07 16:43:30.028: E/AndroidRuntime(1723):     at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
08-07 16:43:30.028: E/AndroidRuntime(1723):     at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
08-07 16:43:30.028: E/AndroidRuntime(1723):     at android.view.LayoutInflater.createView(LayoutInflater.java:552)
08-07 16:43:30.028: E/AndroidRuntime(1723):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
Run Code Online (Sandbox Code Playgroud)

Xav*_*ler 5

我只是重新阅读你的问题,答案就是打我.我不知何故错过了你的习惯ViewPager是一个内在的类TestActivity.如果要引用XML中的嵌套类,则必须这样做:

<com.example.android.example.TestActivity$MainMenuViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/tabs" />
Run Code Online (Sandbox Code Playgroud)