1


Как я указываю в заголовке, я реализовал перемещение ActionBar Sherlock и Tab внутри. Вкладки - это фрагменты. Внутри одного фрагмента у меня есть mapView. У меня есть некоторые проблемы, когда я переключаюсь между вкладками. Две вкладки - это только списки, внутри которых есть MapView с некоторыми другими представлениями и один с некоторыми настройками.
Моя проблема в том, что когда я меняю вкладки, я получаю мерцание ... Это достаточно долго, чтобы поймать ее с глазом. Это когда я перемещаюсь в обычных вкладках, но когда я перехожу на вкладку mapview, сначала я получаю черный экран, который длится немного дольше, чем мерцание.
Есть ли у кого-то проблемы с этой или некоторыми подобными проблемами ???
EDITED КОД:
Шерлок, фрагменты, вкладки и MapView

@Override 
    protected void onCreate(Bundle arg0) { 
     super.onCreate(arg0); 
     //setContentView(R.layout.sherlock); 
     Log.i(TAG, "onCreate"); 
     settings_drawable = new StateListDrawable(); 
     settings_drawable.addState(new int [] {STATE_PRESSED}, getResources().getDrawable(R.drawable.jk_uma_button_settings_pressed)); 
     settings_drawable.addState(new int[] {}, getResources().getDrawable(R.drawable.jk_uma_button_settings_normal)); 

     home = new StateListDrawable(); 
     home.addState(new int [] {STATE_PRESSED}, getResources().getDrawable(R.drawable.jk_button_home_pressed)); 
     home.addState(new int[] {}, getResources().getDrawable(R.drawable.jk_button_home_normal)); 

     bar = getSupportActionBar(); 


     bar.setDisplayShowTitleEnabled(false); 
     bar.setIcon(R.drawable.jk_uma_logo); 

     bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     bar.setHomeButtonEnabled(true); 

     tabs_adapter = new TabAdapter(this); 

     tabs_adapter.addTab(bar.newTab().setText(" Home").setIcon(R.drawable.jk_icon_home), "Tab1", MapHome.class, null); 
     tabs_adapter.addTab(bar.newTab().setText(" Explore").setIcon(R.drawable.jk_icon_explore), "Tab2", MapExplore.class, null); 
     tabs_adapter.addTab(bar.newTab().setText(" My Views").setIcon(R.drawable.jk_icon_myview), "Tab3", MapMyStreams.class, null); 
    } 

public static class TabAdapter implements ActionBar.TabListener { 

     private final Context context; 
     private final ActionBar action_bar; 
     private final HashMap<String, TabInfo> tabs = new HashMap<String, TabInfo>(); 
     private TabInfo last_tab = null; 
     private TabInfo camera_info; 

     private String current_camera_tab; 
     private String current_fragment_tab; 

     private class TabInfo { 
      private String tag; 
      private Class clss; 
      private Bundle args; 
      private Fragment fragment; 
      private Fragment fragment_details; 
      private String current_fragment; 

      TabInfo(String tag, Class clazz, Bundle args, String curent) { 
       this.tag = tag; 
       this.clss = clazz; 
       this.args = args; 
       this.current_fragment = curent; 
      } 

     } 

     public TabAdapter(SherlockFragmentActivity activity) { 
      super(); 
      this.context = activity; 
      this.action_bar = activity.getSupportActionBar(); 
     } 

     public void addTab(ActionBar.Tab tab, String tag, Class<?> clss, Bundle args){ 
      Log.i(((Sherlock)context).TAG, "addTab"); 
      TabInfo info = new TabInfo(tag, clss, args, "1"); 
      tab.setTag(tag); 
      tab.setTabListener(this); 
      tabs.put(tag, info); 
      action_bar.addTab(tab); 
     } 

     Handler h = new Handler(){ 
      @Override 
      public void handleMessage(Message msg) { 
       super.handleMessage(msg); 
       switchTab(String.valueOf(msg.obj)); 
      } 
     }; 

     public void changeOnRuntime(String camera_no){ 
      Log.i("TABS ADAPTER", "=================changeOnRuntime========="+camera_no); 
      Bundle args = new Bundle(); 
      args.putString("camera_no", camera_no); 
      FragmentTransaction ft = ((Sherlock)context).getSupportFragmentManager().beginTransaction(); 

      String tag = (String) action_bar.getSelectedTab().getTag(); 
      TabInfo tab = tabs.get(tag); 
       Fragment fragm = MapCamera.newInstance(camera_no); 
       tab.fragment_details = fragm; 
       tab.current_fragment = "2"; 
       ft.hide(tab.fragment); 
       ft.add(android.R.id.content, tab.fragment_details, "Tab5"); 

      ft.commit(); 
     } 

     @Override 
     public void onTabSelected(Tab tab, FragmentTransaction ft) { 
      Log.i("TAB SELECTED", "===================NOT NULL=============="+ ft); 
      if(ft == null){ 
       Log.i("TAB SELECTED", "===================NULLLLLLLLLLLL=============="); 
      } 
      String tag = (String) tab.getTag(); 
      TabInfo newTab = (TabInfo) this.tabs.get(tag); 
      if (last_tab != newTab) { 

        if (newTab != null) { 
         Log.i("TAB SELECTED", "===================NEW TAB=============="); 

         if(newTab.current_fragment.equalsIgnoreCase("1")){ 
          Log.i("TAB SELECTED", "===================NEW TAB 1=============="); 
          if (newTab.fragment == null) { 
           Log.i("TAB SELECTED", "===================NEW TAB 1 NULL=============="); 
           newTab.fragment = Fragment.instantiate(context, 
             newTab.clss.getName(), newTab.args); 
           ft.add(android.R.id.content, newTab.fragment, newTab.tag); 
          }else { 
           Log.i("TAB SELECTED", "===================NEW TAB 1 NOT NULL=============="); 
           ft.attach(newTab.fragment); 
          } 
         }else{ 
          Log.i("TAB SELECTED", "===================NEW TAB 2=============="); 
          ft.attach(newTab.fragment_details); 
         } 


        } 
        last_tab = newTab; 
        }        
      } 
     } 

     public void switchTab(String tab){ 
      if(tab.equalsIgnoreCase("Tab1")){ 
       action_bar.setSelectedNavigationItem(0); 
      }else if (tab.equalsIgnoreCase("Tab2")) { 
       action_bar.setSelectedNavigationItem(1); 
      }else if (tab.equalsIgnoreCase("Tab4")) { 
       action_bar.setSelectedNavigationItem(3); 
      } 
     } 

     @Override 
     public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
      Log.i("TAB SELECTED", "=================== 2222 =============="); 
      if (last_tab != null) { 
       if (last_tab.fragment != null) { 
        if(last_tab.current_fragment.equalsIgnoreCase("1")){ 
         Log.i("TAB SELECTED", "=================== detach 1 =============="); 
         ft.detach(last_tab.fragment); 
        }else{ 
         Log.i("TAB SELECTED", "=================== detach 2 =============="); 
         ft.detach(last_tab.fragment_details); 
        } 

       } 
      } 
     } 

     @Override 
     public void onTabReselected(Tab tab, FragmentTransaction ft) { 
      // TODO Auto-generated method stub 

     } 

    } 
+0

Как ваша реализация? Покажи нам. – Moesio

ответ

0

«Черный вид», что это звучит, как вы описываете, это вопрос знают при переключении между фрагментами, один из которых является v2 карта. Вы можете узнать больше об этом в this post. Я сам столкнулся с этой проблемой. Решение, предложенное в цитируемом сообщении, очень простое.

<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

<android.support.v4.view.ViewPager 
    android:id="@+id/fragment_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
</android.support.v4.view.ViewPager> 

<!-- hack to fix ugly black artefact with maps v2 --> 
<FrameLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@android:color/transparent" /> 

</FrameLayout> 

Добавление вида на прозрачный черный вид устраняет проблему. Не уверен, почему, но это так.

+0

Но у меня нет ViewPager в моем приложении ... фрагменты не в представлении пейджера ... просто вкладки ... Я редактировал вопрос с помощью некоторого кода ... – Jovan

+0

Вы подтвердили, что проблема с картой не связана с факт, что его фрагмент? Я не уверен, что проблема черного ящика связана с пейджером. Я посмотрю код, который вы разместили, и посмотрим, смогу ли я что-нибудь придумать. – Rarw

+0

Google map MapView ... потому что в этом фрагменте у меня есть карта и некоторые другие макеты (некоторые списки, некоторые кнопки и вид поиска) ... – Jovan