I'm trying to simply override one method of ViewPager and then use my custom class in XML, but my app is crashing every time I run it.
My Custom Class:
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]);
}
}
In 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" />
I'm getting a ClassNotFoundException at runtime.
The only thing worth noting is this Custom ViewPager is nested in another class. Is this a problem?
EDIT: Still working on getting the runtime logcat exception, but when I go to graphical layout in Eclipse and look at error log I see this:
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)
and at runtime:
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)
I just reread your question and the answer just hit me. I somehow missed that your custom ViewPager
is an inner class of TestActivity
. If you want to reference nested classes in XML you have to do it like this:
<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" />