2010-11-05 8 views
7

Sto provando a utilizzare il ViewSwitcher per eseguire i passaggi tra due visualizzazioni. Uno è un ImageView e l'altro è un MapView. Ho un pulsante che l'utente fa clic per eseguire questa opzione ma i miei codici stanno causando un errore. Ragazzi avete idea di cosa si tratta?Come utilizzare Android ViewSwitcher?

<?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> 

L'errore è in quanto tale

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) 

davvero apprezzare l'aiuto! :)

risposta

1

Stai impostando i parametri di layout in fase di esecuzione o è tutto nell'XML?

Hai provato a inserire le due viste di ViewSwitcher ciascuna nel proprio LinearLayout?

+0

Ciao, grazie. Ho ripubblicato i codici XML. – fgs

+0

lol, l'ho dimenticato. Grazie! – fgs

+0

Hai provato a inserire le due viste di ViewSwitcher ciascuna nel proprio LinearLayout? –

1

È necessario disporre di un LinearLayout che avvolge tutto il resto. Nell'esempio, ne vedo più di uno, ma nessuno principale.

0

Il tag ImageView dovrebbe rientrare nel tag ViewSwitcher, proprio come com.google.android.maps.MapView.

18

Aggiungi il widget ViewSwitcher al file di layout xml. per ViewSwitcher aggiungi 2 nuovi layout.

<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> 

Nella vostra attività, aggiungere la funzione a un pulsante che commuta tra le visualizzazioni

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: inanimazione = "@ Android: Anim/slide_in_left" permette la vista per scorrere in da

sinistra