如何解决我想管理片段之间的导航
我的项目结构看起来与以下类似
我目前面临的问题是,在恢复应用程序时,F7被保留。 并且在打开任何项目的子片段时都无法在bottomnavigationitems之间正确导航 这是我的主要活动课程代码。
public class HomeActivity extends AppCompatActivity {
SpaceNavigationView spaceNavigationView;
int featureClickId=-1;
Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
spaceNavigationView=findViewById(R.id.navigation);
spaceNavigationView.initWithSaveInstanceState(savedInstanceState);
spaceNavigationView.addSpaceItem(new SpaceItem("",R.drawable.ic_baseline_info_24));
spaceNavigationView.addSpaceItem(new SpaceItem("",R.drawable.ic_baseline_chat_24));
spaceNavigationView.addSpaceItem(new SpaceItem("",R.drawable.ic_baseline_ballot_24));
spaceNavigationView.addSpaceItem(new SpaceItem("",R.drawable.ic_baseline_account_circle_24));
spaceNavigationView.setCentreButtonSelectable(true);
spaceNavigationView.setCentreButtonSelected();
spaceNavigationView.setCentreButtonIcon(R.drawable.ic_centericonlarge);
FeatureFragment fragment = (FeatureFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_container);
if(fragment==null)
{
Fragment fragmentt=new FeatureFragment();
loadFragment(fragmentt,"Feature");
}
spaceNavigationView.setSpaceOnClickListener(new SpaceOnClickListener() {
@Override
public void onCentreButtonClick() {
//showHome();
Fragment fragmentA = getSupportFragmentManager().findFragmentByTag("Feature");
if(fragmentA!=null)
{
showHome();
}else
{
Fragment fragment=new FeatureFragment();
loadFragment(fragment,"Feature");
}
spaceNavigationView.setCentreButtonSelectable(true);
}
@Override
public void onItemClick(int itemIndex,String itemName) {
switch (itemIndex)
{
case 0:
break;
case 1:
break;
case 2:
break;
case 3:
showHome();
Fragment fragment=new ProfileFragment();
loadFragment(fragment,"Profile");
break;
}
}
@Override
public void onItemReselected(int itemIndex,"Profile");
break;
}
}
});
}
public void showHome() {
handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
final FragmentManager fm = getSupportFragmentManager();
while(fm.getBackStackEntryCount()>1)
fm.popBackStackImmediate();
}
});
}
private boolean loadFragment(Fragment fragment,String tag)
{
if (fragment!=null)
{
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.fragment_container,fragment,tag)
.addToBackStack(null)
.commit();
return true;
}
return false;
}
@Override
protected void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
@Override
protected void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();
}
@Subscribe(sticky = true,threadMode = ThreadMode.MAIN)
public void onFeatureSelected(FeatureClick event)
{
if(event.isSuccess())
{
Fragment fragment=new DomainFragment();
loadFragment(fragment,"Domain");
}
}
@Subscribe(sticky = true,threadMode = ThreadMode.MAIN)
public void onDomainItemClick(DomainItemClick event)
{
if(event.isSuccess())
{
Fragment fragment=new DetailDomainFragment();
loadFragment(fragment,"DetailDomain");
}
}
@Subscribe(sticky = true,threadMode = ThreadMode.MAIN)
public void onFeatureItemBack(FeatureItemBack event)
{
featureClickId=-1;
if(getSupportFragmentManager().getBackStackEntryCount()>0)
getSupportFragmentManager().popBackStack();
}
@Override
public void onBackPressed() {
int count = getSupportFragmentManager().getBackStackEntryCount();
if (count<= 1) {
super.onBackPressed();
finish();
//additional code
} else {
getSupportFragmentManager().popBackStackImmediate();
}
}
}
我了解到saveInstanceState正在保存错误的片段,因此在恢复活动时会保留不想要的片段。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。