2010-11-05 43 views
7

我正在嘗試使用ViewSwitcher在兩個視圖之間執行切換。一個是ImageView,另一個是MapView。我有一個按鈕,用戶點擊執行此開關,但我的代碼導致錯誤。你們有什麼想法嗎?如何使用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> 

的錯誤是這樣

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) 

很欣賞的幫助! :)

回答

1

您是在運行時設置佈局參數還是XML中的所有內容?

您是否嘗試將ViewSwitcher的兩個視圖分別包裝到自己的LinearLayout中?

+0

嗨,謝謝。我重新發布了XML代碼。 – fgs 2010-11-05 13:59:47

+0

哈哈,忘了它。謝謝! – fgs 2010-11-05 14:09:25

+0

您是否嘗試將ViewSwitcher的兩個視圖分別包裝到自己的LinearLayout中? – 2010-11-05 14:25:29

1

您需要有一個LinearLayout包裝其他所有東西。在這個例子中,我看到了多於一個,但沒有主要的一個。

0

您的ImageView標記應該位於ViewSwitcher標記下,就像com.google.android.maps.MapView一樣。

18

將ViewSwitcher小部件添加到您的xml佈局文件。向ViewSwitcher添加 添加2個新佈局。

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

在你的活性,添加功能到一個按鈕,在視圖之間切換

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(); 
       } 
      } 
     }); 

機器人:inAnimation =「@機器人:動畫/ slide_in_left」允許以便在從左側

滾動