在Android Studio片段之间切换时地图片段不隐藏
Posted
技术标签:
【中文标题】在Android Studio片段之间切换时地图片段不隐藏【英文标题】:Map fragment is not hidden when switch between fragments Android Studio 【发布时间】:2021-08-26 02:44:56 【问题描述】:我正在尝试使用底部导航在片段之间切换。但是,如果我从地图片段切换到其他片段,地图片段仍然在后台,而其他片段则显示在前面。
请在此处查看我的代码:
public class MainActivity extends AppCompatActivity
private FragmentManager fragmentManager;
private Fragment messageFragment = new MessageFragment();
private Fragment mapFragment = new MapsFragment();
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().add(R.id.hostFragment, mapFragment, null).commit();
fragmentManager.beginTransaction().add(R.id.hostFragment, messageFragment, null).commit();
BottomNavigationView bottomNavigationView = findViewById(R.id.bottomNavigationView);
//bottomNavigationView.setSelectedItemId(R.id.mapsFragment);
bottomNavigationView.setOnNavigationItemSelectedListener(navListener);
private BottomNavigationView.OnNavigationItemSelectedListener navListener = new BottomNavigationView.OnNavigationItemSelectedListener()
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item)
switch (item.getItemId())
case R.id.mapsFragment:
fragmentManager.beginTransaction().hide(messageFragment).show(mapFragment).commit();
break;
case R.id.messageFragment:
fragmentManager.beginTransaction().hide(mapFragment).show(messageFragment).commit();
break;
return true;
;
【问题讨论】:
你能分享这两个片段的 XML 吗? 【参考方案1】:您的问题
您将两个片段添加到同一个容器R.id.hostFragment
。
fragmentManager.beginTransaction().add(R.id.hostFragment, mapFragment, null).commit();
fragmentManager.beginTransaction().add(R.id.hostFragment, messageFragment, null).commit();
根据hide 和show 的文档,这意味着您隐藏然后显示相同的容器。
解决方案
使用两个不同的容器视图:
fragmentManager.beginTransaction().add(R.id.mapContainer, mapFragment, null).commit();
fragmentManager.beginTransaction().add(R.id.messageContainer, messageFragment, null).commit();
另一种解决方案
使用replace,而不是隐藏和显示。
fragmentManager.beginTransaction().add(R.id.hostFragment, mapFragment, null).commit();
// Don't add this in `onCreate`
// fragmentManager.beginTransaction().add(R.id.hostFragment, messageFragment, null).commit();
...
// Replace the fragment currently being displayed
switch (item.getItemId())
case R.id.mapsFragment:
fragmentManager.beginTransaction().replace(R.id.hostFragment, mapFragment).commit();
break;
case R.id.messageFragment:
fragmentManager.beginTransaction().replace(R.id.hostFragment, messageFragment).commit();
break;
【讨论】:
以上是关于在Android Studio片段之间切换时地图片段不隐藏的主要内容,如果未能解决你的问题,请参考以下文章