2013-06-14 4 views
12

Ich verwende diese Quelle von Chrisbanes Github: https://github.com/chrisbanes/PhotoView und versuchte machen ViewPager mit Linearlayout aber es Fehler bekommen, wenn ViewPager zu HackyViewPager Casting Hier mein xml ist (bacaan.xml):Kann nicht werfen, um benutzerdefinierte ViewPager Klasse

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:gravity="center_vertical" > 

    <android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="7" /> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="0dip" 
     android:layout_weight="1" 
     android:orientation="horizontal" > 
     ... 
    </LinearLayout> 
</LinearLayout> 

auf der ViewPagerActivity.java, änderte ich dies:

mViewPager = new HackyViewPager(this); 
setContentView(mViewPager); 
mViewPager.setAdapter(new SamplePagerAdapter()); 

dazu:

setContentView(R.layout.bacaan); 
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
ViewPager mViewPager = (HackyViewPager) findViewById(R.id.pager); 
mViewPager.setAdapter(new AdapterGambarPager()); 

tat ich, dass benutzerdefinierte Ansicht finden muß mit dem Paketnamen wie dieses Problem zu erklären ich gefunden habe: Creating custom button class in Android

so änderte ich den xml ViewPager meinen Paketnamen, aber immer noch nicht funktioniert. Irgendeine Ahnung?

edit: Hier ist das Protokoll

06-14 21:01:05.901: E/AndroidRuntime(28345): FATAL EXCEPTION: main 
06-14 21:01:05.901: E/AndroidRuntime(28345): java.lang.RuntimeException: Unable to start activity ComponentInfo{uk.co.senab.photoview.sample/uk.co.senab.photoview.sample.ViewPagerActivity}: android.view.InflateException: Binary XML file line #8: Error inflating class uk.co.senab.photoview.sample.HackyViewPager 
06-14 21:01:05.901: E/AndroidRuntime(28345): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at android.app.ActivityThread.access$600(ActivityThread.java:127) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at android.os.Handler.dispatchMessage(Handler.java:99) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at android.os.Looper.loop(Looper.java:137) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at android.app.ActivityThread.main(ActivityThread.java:4448) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at java.lang.reflect.Method.invokeNative(Native Method) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at java.lang.reflect.Method.invoke(Method.java:511) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:823) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:590) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at dalvik.system.NativeStart.main(Native Method) 
06-14 21:01:05.901: E/AndroidRuntime(28345): Caused by: android.view.InflateException: Binary XML file line #8: Error inflating class uk.co.senab.photoview.sample.HackyViewPager 
06-14 21:01:05.901: E/AndroidRuntime(28345): at android.view.LayoutInflater.createView(LayoutInflater.java:589) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at android.view.LayoutInflater.rInflate(LayoutInflater.java:739) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:255) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at android.app.Activity.setContentView(Activity.java:1835) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at uk.co.senab.photoview.sample.ViewPagerActivity.onCreate(ViewPagerActivity.java:34) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at android.app.Activity.performCreate(Activity.java:4465) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1931) 
06-14 21:01:05.901: E/AndroidRuntime(28345): ... 11 more 
06-14 21:01:05.901: E/AndroidRuntime(28345): Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet] 
06-14 21:01:05.901: E/AndroidRuntime(28345): at java.lang.Class.getConstructorOrMethod(Class.java:460) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at java.lang.Class.getConstructor(Class.java:431) 
06-14 21:01:05.901: E/AndroidRuntime(28345): at android.view.LayoutInflater.createView(LayoutInflater.java:561) 
06-14 21:01:05.901: E/AndroidRuntime(28345): ... 22 more 

Ist hier HackyViewPager.java:

package uk.co.senab.photoview.sample; 

import android.content.Context; 
import android.support.v4.view.ViewPager; 
import android.view.MotionEvent; 

/** 
* Hacky fix for Issue #4 and 
* http://code.google.com/p/android/issues/detail?id=18990 
* 
* ScaleGestureDetector seems to mess up the touch events, which means that 
* ViewGroups which make use of onInterceptTouchEvent throw a lot of 
* IllegalArgumentException: pointerIndex out of range. 
* 
* There's not much I can do in my code for now, but we can mask the result by 
* just catching the problem and ignoring it. 
* 
* @author Chris Banes 
*/ 
public class HackyViewPager extends ViewPager { 

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

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
     try { 
      return super.onInterceptTouchEvent(ev); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
      return false; 
     } 
    } 

} 

Antwort

22
<android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="7" /> 

, wenn Sie Ihre cusmo werfen wollen ViewPager sollten Sie die xml

ändern
<com.yourpackage.HackyViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="7" /> 

verpassten Sie den folgenden Konstruktor

public HackyViewPager(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 
+0

ja, ich habe das versucht, aber immer noch nicht funktioniert. Vielen Dank für Ihren Besuch –

+0

, aber Sie können die gleiche Ausnahme erhalten. Was ist die Ausnahme, die du bekommst? – Blackbelt

+0

Ich habe den LogCat des Fehlers hinzugefügt, bitte werfen Sie einen Blick –

4

zu erklären Da Sie eine benutzerdefinierte ViewPager und nicht die in der Support-Bibliothek Sie Ihre xml

Änderung

<android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="7" /> 

zu

ändern müssen verwenden
<com.package.HackyViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="7" /> 

natürlich den Pfad zum richtigen ViewPager verwenden.

+0

ja, ich habe das versucht.Der Fehler verweist auf diese Zeile von XML. –

+0

@victoriopui sind Ihre Importe korrekt? Ich denke, Sie müssen Ihren benutzerdefinierten ViewPager in Ihre Aktivität importieren. –

+0

ich denke, es ist korrekt. Ich benutze Strg + Shift + O auf Eclipse und die benutzerdefinierte Ansicht ist auf dem gleichen Paket. Ob ich falsch liege, versuche ich es manuell hinzuzufügen, aber immer noch keine Verwendung. –

1

Sie müssen den Superkonstruktor in Ihrer Klasse aufrufen. Haben Sie beide Konstruktoren in Ihrer benutzerdefinierten ViewPager-Klasse ausprobiert? wie,

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

public HackyViewPager(Context context) { 
    super(context); 
} 
0

Vielleicht ist es zu spät, diese Frage zu beantworten, habe ich durch das gleiche Problem gegangen .Diese Fehler werfen kann nicht oder aufblasen kann nicht war, weil ich die viewpager als innere Klasse wurde erstreckt der Aktivität, die diesen Viewpager zeigt, also was ich getan habe, war, dass ich eine separate Klasse für diesen customViewPager erstellt habe und dann das Problem gelöst habe.

Verwandte Themen