1


헤드 라인에서 ActionBar Sherlock 및 Tab navigation을 구현했습니다. 탭은 조각입니다. 하나의 조각 안에 mapView가 있습니다. 나는 탭들 사이에서 바꿀 때 몇 가지 문제가있다. 두 개의 탭은 단순한 목록이며 하나는 다른보기가있는 MapView이고 일부는 설정 정보가있는 목록입니다.
내 문제는 내가 탭을 바꿀 때 약간 깜박 거리는 것입니다. 눈으로 만 잡을만큼 길었습니다. 이것은 일반 탭에서 움직이는 경우이지만, 먼저 mapview 탭으로 갈 때 깜박임이 조금 더 오래 지속되는 검정색 화면이 나타납니다.
누군가이 문제 또는 이와 유사한 문제가 있습니까?
편집을 할 CODE하십시오 V2 맵 중 하나는 조각 사이를 전환 할 때
Sherlock, Fragments, Tabs 및 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

당신이 설명하는 것 같은 소리가 난다한다는 '블랙 뷰 "는 알고 문제입니다. 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지도는 MapView입니다. 그 조각에는 Map과 일부 다른 레이아웃 (일부 listview, 일부 버튼 및 검색보기)이 있기 때문에 ... – Jovan