Wie Android ViewSwitcher benutzen?
-
29-09-2019 - |
Frage
Ich versuche, die ViewSwitcher zu verwenden Schalter zwischen zwei Ansichten auszuführen. Eine davon ist ein Image und der andere ist ein MapView. Ich habe eine Schaltfläche, die der Benutzer diesen Schalter ausführen klickt, aber meine Codes verursachen einen Fehler. Haben Sie Jungs haben keine Ahnung, was ist?
<?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">
<relativelayout
android:id="@+id/RelativeLayout01"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<imageview
android:id="@+id/banner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignparenttop="true"
android:background="@drawable/banner_location"
android:clickable="false">
</imageview>
<linearlayout
android:id="@+id/LinearLayout01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/banner"
android:layout_centerhorizontal="true"
android:layout_gravity="center_horizontal"
android:orientation="horizontal"
android:paddingbottom="5px">
<imagebutton
android:id="@+id/btnBusSvcs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginright="5px"
android:layout_margintop="5px"
android:background="@drawable/btn_bus_svcs">
</imagebutton>
<imagebutton
android:id="@+id/btnDrvRoute"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginleft="5px"
android:layout_margintop="5px"
android:background="@drawable/btn_drv_route">
</imagebutton>
</linearlayout>
<viewswitcher
android:id="@+id/switcher"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/imgViewBusSvcs"
android:layout_below="@+id/LinearLayout01">
<imageview
android:id="@+id/imgViewBusSvcs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/LinearLayout01"
android:layout_centerinparent="true"
android:layout_gravity="center_horizontal"
android:background="@drawable/bus_svcs"
android:clickable="false">
</imageview>
<com.google.android.maps.mapview
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="300px"
android:apikey="REMOVE MY API KEY"
android:clickable="true">
</com.google.android.maps.mapview>
</viewswitcher>
<imagebutton
android:id="@+id/btnBackHome"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignparentbottom="true"
android:layout_centerhorizontal="true"
android:layout_gravity="center_horizontal"
android:background="@drawable/btn_back_to_home">
</imagebutton>
</relativelayout>
</linearlayout>
Der Fehler ist als solche
11-05 20:53:13.964: ERROR/AndroidRuntime(1417): Uncaught handler: thread main exiting due to uncaught exception
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): java.lang.ClassCastException: android.widget.FrameLayout$LayoutParams
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at android.widget.RelativeLayout.getRelatedView(RelativeLayout.java:694)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at android.widget.RelativeLayout.getRelatedViewParams(RelativeLayout.java:708)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at android.widget.RelativeLayout.applySizeRules(RelativeLayout.java:629)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:279)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at android.view.View.measure(View.java:7115)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:2875)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:888)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at android.widget.LinearLayout.measureVertical(LinearLayout.java:350)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at android.widget.LinearLayout.onMeasure(LinearLayout.java:278)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at android.view.View.measure(View.java:7115)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:2875)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at android.view.View.measure(View.java:7115)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:2875)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at android.widget.FrameLayout.onMeasure(FrameLayout.java:245)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at android.view.View.measure(View.java:7115)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at android.view.ViewRoot.performTraversals(ViewRoot.java:698)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at android.view.ViewRoot.handleMessage(ViewRoot.java:1482)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at android.os.Handler.dispatchMessage(Handler.java:99)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at android.os.Looper.loop(Looper.java:123)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at android.app.ActivityThread.main(ActivityThread.java:3948)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at java.lang.reflect.Method.invokeNative(Native Method)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at java.lang.reflect.Method.invoke(Method.java:521)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
11-05 20:53:13.995: ERROR/AndroidRuntime(1417): at dalvik.system.NativeStart.main(Native Method)
schätzen die Hilfe! :)
Lösung
Sind Sie Layoutparameter zur Laufzeit einstellen oder ist alles in der XML?
Haben Sie versucht, die beiden Ansichten des ViewSwitcher jeder in seine eigene Linearlayout Verpackung?
Andere Tipps
Fügen Sie das ViewSwitcher Widget auf Ihre XML-Layout-Datei. zum ViewSwitcher 2 neue Layouts hinzufügen.
<ViewSwitcher
android:id="@+id/viewSwitcher1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:inAnimation="@android:anim/slide_in_left" >
<LinearLayout
android:id="@+id/view1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/text"
android:text="This is simplezdscsdc text"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
</LinearLayout>
<LinearLayout
android:id="@+id/view2"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/text"
android:text="This issdsdsds simplezdscsdc text"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
</LinearLayout>
</ViewSwitcher>
In Ihrer Tätigkeit, Add-Funktion auf einen Knopf, den Schalter zwischen den Ansichten
viewSwitcher = (ViewSwitcher)findViewById(R.id.viewSwitcher1);
myFirstView= findViewById(R.id.view1);
mySecondView = findViewById(R.id.view2);
button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if (viewSwitcher.getCurrentView() != myFirstView){
viewSwitcher.showPrevious();
} else if (viewSwitcher.getCurrentView() != mySecondView){
viewSwitcher.showNext();
}
}
});
Android: inanimation = "@ android: Anim / slide_in_left" ermöglicht die Ansicht zu blättern in von links
Sie müssen sonst ein Linearlayout Verpackung, alles haben. Am Beispiel sehe ich mehr als eine, aber kein Haupt ein.
Ihr Image Tag unter ViewSwitcher Tag fallen sollte, genau wie die com.google.android.maps.MapView.