2016-12-28 3 views
0

SuportMapフラグメントの問題がありますが、マップフラグメントに戻ったときに空白のフラグメントが表示されています。これは状況です。 左の引き出し、ドロワーはフラグメントAおよびフラグメントBを表示するための牽引項目、2つのタブを有するタブホストを含​​むフラグメントA(マップタブおよび第2のタブ)を含む。 アプリケーションはランチにマップを表示していますが、それは問題ありませんが、引き出しの2番目のアイテムをフラグメントBに移動してフラグメントAに戻すと、マップフラグメントに空白のフラグメントが表示されます。別のタブをクリックしてマップタブに戻って、マップを再度表示します。私は何が間違っているのか分からない。SupportMapFragmentに空のアクティビティが表示されています

MainActivity:

public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
// Handle navigation view item clicks here. 
int id = item.getItemId(); 

MainFragment mainFragment = (MainFragment) getSupportFragmentManager().findFragmentByTag(MainFragment.TAG); 

if (id == R.id.nav_home && mainFragment == null) { 
    showFragment(new MapFragment(), "MapFragment"); 
} else if (id == R.id.nav_gallery && 
     getSupportFragmentManager().findFragmentByTag(GalleryFragment.TAG) == null) { 
    showFragment(new B(), "B"); 
} 

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
assert drawer != null; 
drawer.closeDrawer(GravityCompat.START); 
return true; 
} 

public void showFragment(Fragment fragment, String tag) { 
     FragmentManager manager = getSupportFragmentManager(); 
     boolean fragmentPopped = manager.popBackStackImmediate(tag, 0); 

    if (!fragmentPopped) { //fragment not in back stack, create it. 
     FragmentTransaction ft = manager.beginTransaction(); 
     ft.replace(R.id.content, fragment); 
     ft.addToBackStack(tag); 
     ft.commit(); 
    } 
} 

フラグメントA:

private void initTabHost() { 
    mTHost.setOnTabChangedListener(this); 
    mTHost.setup(); 

    TabHost.TabSpec MapSpec = mTHost.newTabSpec(PeopleFragment.TAG); 
    MapSpec.setIndicator(getTabIndicator(R.string.tool_bar_people, R.drawable.selector_map_tab)); 
    MapSpec.setContent(new DummyTabContent(getActivity())); 
    mTHost.addTab(MapSpec); 

    TabHost.TabSpec secondSpec = mTHost.newTabSpec(SecondFragment.TAG); 
    secondSpec.setIndicator(getTabIndicator(R.string.tool_bar_news, R.drawable.selector_second_tab)); 
    secondSpec.setContent(new DummyTabContent(getActivity())); 
    mTHost.addTab(secondSpec); 
} 

private View getTabIndicator(int title, int icon) { 
    View view = LayoutInflater.from(getActivity()).inflate(R.layout.item_tab_layout, null); 

    ImageView ivIcon = (ImageView) view.findViewById(R.id.iv_icon); 
    ivIcon.setImageResource(icon); 

    TextView tvTitle = (TextView) view.findViewById(R.id.tv_title); 
    tvTitle.setText(title); 

    return view; 
} 

@Override 
public void onTabChanged(String tabId) { 
    FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

    MapFragment mapFragment = (MapFragment) fragmentManager.findFragmentByTag(MapFragment.TAG); 
    SecondFragment secondFragment = (SecondFragment) fragmentManager.findFragmentByTag(SecondFragment.TAG); 

    if (mapFragment != null) { 
     fragmentTransaction.detach(mapFragment); 
    } 
    if (secondFragment != null) { 
     fragmentTransaction.detach(secondFragment); 
    } 

    if (tabId.equalsIgnoreCase(MapFragment.TAG)) { 
     if (mapFragment == null) { 
      fragmentTransaction.add(R.id.fl_real_tab_content, new MapFragment(), MapFragment.TAG); 
     } else { 
      fragmentTransaction.attach(mapFragment); 
     } 
    } else if (tabId.equalsIgnoreCase(SecondFragment.TAG)) { 
     if (secondFragment == null) { 
      fragmentTransaction.add(R.id.fl_real_tab_content, new SecondFragment(), SecondFragment.TAG); 
     } else { 
      fragmentTransaction.attach(SecondFragment); 
     } 
    } 
    fragmentTransaction.commit(); 
} 

MapFragment:

@Override 
public void onResume() { 
    super.onResume(); 
    setUpMapIfNeeded(); 
} 
public void setUpMapIfNeeded() { 
    // Do a null check to confirm that we have not already instantiated the mMap. 
    ((SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.map)) 
      .getMapAsync(this); 
} 

すべてのヘルプ何をすべきか、問題は何ですか?

+0

ログを確認しましたか?そこに何かがあるはずです。 –

+0

はいログをチェックしたところ、エラーはなく、トレースしています。 しかし、地図の断片を添付して切り離すのが問題だと思われます。 –

答えて

0

解決策の回避策でマニフェストファイルのアクティビティにandroid:launchMode=="SingleInstance"を追加してこの問題を修正しました。この場合、アクティビティに戻ると、アクティビティは新しいフラグメントを作成せず、状態を最初からリセットします。

関連する問題