2012-02-15 34 views
3

我有一個android應用程序,其視圖中包含3個頁面,用戶可以通過在其間滑動手指(向左或向右 - 水平視圖分頁)進行導航。我下載了「android.support.v4.view.ViewPager」,並找到了實現刷卡部分的方法,主要歸功於本教程:http://mobile.tutsplus.com/tutorials/android/android-user-interface-design-horizontal-view-paging/android swipe水平視圖使用MapView進行分頁

我的問題是我想要啓動一個MapView。但要啓動MapView,我需要一個擴展MapActivity的活動。如果我在包含所有3個視圖的MapActivity中擁有所有「RecordAdapter」類,那麼我遇到了一個問題,因爲每個MapActivity都只能分配一個MapView。所以如果我滑回到另一個頁面,然後回到地圖頁面,項目就會崩潰。我在代碼中的方式是:

  switch (position) { 
      case 0: 
       resId = R.layout.record1; 
       break; 
      case 1: 
       resId = R.layout.record2; 
       break; 
      case 2: 
       resId = R.layout.record3;     
       break; 
      } 

其中「record3」包含我的MapView。從實驗崩潰發生時,當我回到「record1」,然後再次「record2」。它似乎啓動了一個新的MapView,當它進入record2(?)!這一定是這樣,因爲奇怪的是,如果我有MapView在中間:

  switch (position) { 
      case 0: 
       resId = R.layout.record1; 
       break; 
      case 1: 
       resId = R.layout.record3; 
       break; 
      case 2: 
       resId = R.layout.record2;     
       break; 
      } 

它工作正常!但這不是我想要的(也許我將來也需要一個4位的頁面)。

我希望我寫它的方式是不是太複雜了..

那麼,應該怎麼辦?有任何想法嗎?編輯: 我找到了這個答案。我需要添加 「myPager.setOffscreenPageLimit(3);」 當我從我的代碼中調用ViewPager時。通過這種方式,觀點保持活力!

+0

您能否編輯您的問題中的示例代碼以您的解決方案作爲示例進行更新?謝謝 – topwik 2012-07-30 15:30:58

+0

對不起,我遲到了,但我正在休假。正如我上面寫的,你可以使用myPager.setOffscreenPageLimit(3);以克服困難(請參閱我提供的鏈接以查看如何將myPager定義爲ViewPager的實例)。我上面提供的示例代碼保持不變。但儘管崩潰問題已解決,但我在設置ClickListeners時遇到了一個可怕的問題。所以我最終使用了一個很棒的flingscrollviewer。如果你不想在你的視圖中發生點擊事件,上面的代碼應該可以工作。 – george 2012-08-03 08:47:42

+0

感謝您的回覆。不知道我最初的評論意圖是什麼......:我想代碼一直在那裏。問候, – topwik 2012-08-03 17:51:25

回答

1

我猜你的崩潰是由實例化多個mapviews導致的IllegalStateException?

如果mapview從第二個視圖啓動,viewpager會準備好視圖,以便在用戶想要更改選項卡時可以平滑過渡。它通過實際加載它來做到這一點。 (使用android sdk中的hierarchyviewer工具在某個時候檢查出來)。

不管怎麼說,嘗試使用這種方法的onDestroy:

@Override 
public void onDestroy() { 
    super.onDestroy(); 

    ((ViewGroup) map.getParent()).removeView(map); 
} 

應該刪除每當視圖被破壞的MapView,使之可以再利用。

如果失敗,請嘗試也讓你的MapView靜:

private static MapView mapview; 

那麼,如果以某種方式創建地圖標籤的多個實例,它們可以使用相同的MapView。

+0

感謝您的答覆,但我很久以前用flingscrollviewer解決了這個問題(我在這裏找到了一個很好的例子 - > http://www.jmstudio。 org/archives/391,但此頁面暫時關閉) – george 2012-07-01 21:47:07

+0

另外,當我在編輯中編寫原始方法時,也可以添加「myPager.setOffscreenPageLimit(3);」 – george 2012-07-01 21:50:50

+0

好吧,很高興你明白了。 – bhekman 2012-07-01 23:37:00