Classcastexception-Fehler ViewGroup$LayoutParams kann nicht umgewandelt werden, ViewPager$LayoutParams
Meine ersten code-Zeile wird in der überschriebenen Methode onGlobalLayout()
:
img.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, 100));
Classcastexception-Fehler auftreten in der überschriebenen Methode onGlobalLayout()
-
Fehler Melden:
09-02 14:25:35.326: E/AndroidRuntime(5187): java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.support.v4.view.ViewPager$LayoutParams
09-02 14:25:35.326: E/AndroidRuntime(5187): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1319)
09-02 14:25:35.326: E/AndroidRuntime(5187): at android.view.View.measure(View.java:15181)
09-02 14:25:35.326: E/AndroidRuntime(5187): at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617)
09-02 14:25:35.326: E/AndroidRuntime(5187): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399)
09-02 14:25:35.326: E/AndroidRuntime(5187): at android.view.View.measure(View.java:15181)
09-02 14:25:35.326: E/AndroidRuntime(5187): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4814)
09-02 14:25:35.326: E/AndroidRuntime(5187): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1390)
Und wenn ich den folgenden Code, um zur Behebung der oben genannten Fehler angezeigt wie im anderen SO posten:
img.setLayoutParams(new ViewPager.LayoutParams(ViewPager.LayoutParams.MATCH_PARENT, 100));
Dann bekomme ich den compile-Zeit-Fehler:
The constructor ViewPager.LayoutParams(int, int) is undefined
ViewPager in xml ist folgendermaßen definiert:
<android.support.v4.view.ViewPager
android:id="@+id/HView"
android:layout_width="560dp"
android:layout_height="255dp"
android:layout_centerHorizontal="true"
android:layout_marginLeft="160sp"
android:layout_marginTop="110sp"
android:layout_marginBottom="80sp">
</android.support.v4.view.ViewPager>
- developer.android.com/reference/android/support/v4/view/.... überprüfen Sie die Konstruktoren.
public ViewPager.LayoutParams (Context context, AttributeSet attrs)
Ihre params falsch sind kein Konstruktor int int als Parameter - überprüfen Sie Ihre Einfuhren bitte
- Ok ich habe überprüft, dass aber dann, Wie es zu lösen.
android.support.v4.view.ViewPager
- was ist das
img
? wo ist dies in XML, was die Eltern dieserimg
- versuchen ViewGroup statt ViewPager in mit LayoutParams
- img -
final ImageView img = new ImageView(getActivity());
Seine Eltern auch dynamisch erstellt:linearlayout = new LinearLayout(getActivity()); linearlayout.addView(img);
. Dies ist alle innerhalbandroid.support.v4.view.ViewPager
in der xml. - Ok, versuchen
img.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 100));
- Ich habe versucht, alle diese Kombinationen gleichen Fehler.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein Bild hat schon layout params. Anstatt Sie zu ersetzen Sie mit einem neuen Objekt (das ist der falsche Typ, in diesem Fall
ViewPager
erwartetViewPager.LayoutParams
), können Sie ändern Sie ein bestehendes layout params, wie diese:Beachten Sie, dass unbedingt anfordern re-layout in
onGlobalLayout()
kann eine schlechte Idee, führt zu unendlichen layout geht. Ich habe nicht überprüft, es mich, ob dies der Fall ist.onGlobalLayout()
und seine Arbeitsmethoden in Ordnung, aber ich bemerkte, dass mein code wird immer aufgerufen, bevoronGlobalLayout()
. Dies erscheint seltsam, genau wie threads tun. Also ich bin gebunden, um es im innerenonGlobalLayout()
.http://stackoverflow.com/questions/18533224/getting-end-position-of-the-textview-and-imageview-with-respect-to-top-of-the-sc
view.getViewTreeObserver().removeOnGlobalLayoutListener(this);
.Tun auf diese Weise
UPDATE
09-02 14:37:23.953: E/AndroidRuntime(5822): java.lang.ClassCastException: android.view.ViewGroup$LayoutParams cannot be cast to android.support.v4.view.ViewPager$LayoutParams
Sollten Sie sicherstellen, dass die
LayoutParam
Klasse, die Sie verwenden, ist von der korrekten übergeordneten Klasse Layout. Und Sie müssen die LayoutParams desViewGroup
dieViewPager
sitzen, als die Eltern derView
muss wissen, welche Größe zu reservieren, um die untergeordnete Ansicht.Zum Beispiel, in Ihrem Fall die
ViewGroup
ist einRelativeLayout
verwenden, benötigen Sie dieRelativeLayout.LayoutParams
Klasse.Können Sie Folgendes versuchen: