- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
按后退按钮后,单击按钮时显示的新 fragment 不会关闭,而是关闭整个应用程序。该按钮位于三个选项卡之一内。 mainActivity.java、HeroesFragment(具有三个选项卡的 fragment )、StrengthHeroesFragment(具有按钮的三个选项卡之一)的代码如下。
MainActivity.java
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
private DrawerLayout drawer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar=findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
drawer=findViewById(R.id.draw_layout);
NavigationView navigationView=findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
ActionBarDrawerToggle toggle=new ActionBarDrawerToggle(this,drawer,toolbar,
R.string.navigation_drawer_open,R.string.navigation_drawer_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
if (savedInstanceState==null){
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new HeroesFragment()).commit();
navigationView.setCheckedItem(R.id.nav_heroes);}
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.nav_heroes:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new HeroesFragment()).commit();
break;
case R.id.nav_items:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new ItemsFragment()).commit();
break;
case R.id.nav_counterpicker:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new CounterPickerFragment()).commit();
break;
case R.id.nav_news:
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new NewsFragment()).commit();
break;
}
drawer.closeDrawer(GravityCompat.START);
return true;
}
@Override
public void onBackPressed() {
if (drawer.isDrawerOpen(GravityCompat.START)){
drawer.closeDrawer(GravityCompat.START);
}
else{
super.onBackPressed();
}
}
}
HeroesFragment.java(包含三个选项卡的 fragment )
public class HeroesFragment extends Fragment {
private TabLayout tabLayout;
private AppBarLayout appBarLayout;
private ViewPager viewPager;
View view;
RelativeLayout relativeLayout;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
view= inflater.inflate(R.layout.fragment_heroes,container,false);
relativeLayout=(RelativeLayout)view.findViewById(R.id.hero_layout);
tabLayout=(TabLayout)view.findViewById(R.id.heroes_tablayout);
appBarLayout=(AppBarLayout)view.findViewById(R.id.hero_appbar);
viewPager=(ViewPager)view.findViewById(R.id.heroes_viewpager);
ViewPageAdapter adapter=new ViewPageAdapter(getChildFragmentManager(),1);
adapter.AddFragment(new StrengthHeroesFragment(),"Strength" );
adapter.AddFragment(new AgilityHeroesFragment(),"Agility");
adapter.AddFragment(new IntelligenceHeroesFragment(),"Intelligence");
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.addTab(tabLayout.newTab().setText("Tab 1"));
tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
switch (tab.getPosition()){
case 0:
Toast.makeText(getContext(),"Tab 1",Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(getContext(),"Tab 2",Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(getContext(),"tab 3",Toast.LENGTH_SHORT).show();
break;
default:
break;
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);
return view;
}
}
StrengthHeroesFragment.java(包含按钮的 fragment )
public class StrengthHeroesFragment extends Fragment {
View view;
ImageButton ib1,ib2,ib3,ib4,ib5,ib6;
TextView t1,t2,t3,t4,t5,t6;
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable
Bundle savedInstanceState) {
view=inflater.inflate(R.layout.fragment_strength_heroes,container,false);
ib1=(ImageButton)view.findViewById(R.id.abaddon_icon);
ib1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
HeroDetailsFragment heroDetailsFragment=new HeroDetailsFragment();
Bundle data=new Bundle();
data.putString("heroname","Abaddon");
heroDetailsFragment.setArguments(data);
FragmentTransaction transaction=getChildFragmentManager().beginTransaction();
transaction.replace(R.id.strength_hero_layout,heroDetailsFragment).addToBackStack(null);
transaction.commit();
}
});
return view;
}
}
当我在 StrengthHeroes fragment 中使用 getFragmentManager() 而不是 getChildFragmentManager() 时,它实际上可以工作,但是当我切换到抽屉导航中的另一个 fragment 时,选项卡布局 fragment 中的内容消失了。我还尝试使用 setPrimaryNavigationFragment() 它仍然不起作用。请帮我解决一下......提前致谢。
最佳答案
使用下面的代码代替 super.onBackpress()
@Override
public void onBackPressed() {
if (drawer.isDrawerOpen(GravityCompat.START)){
drawer.closeDrawer(GravityCompat.START);
}
else{
getSupportFragmentManager().popBackStack();
}
}
关于java - addToBackStack() 不适用于 getChildFragmentManager(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60466038/
我有同样的问题有这个帖子:android.support.v4.app.Fragment: undefined method getChildFragmentManager() .我需要使用 getC
错误:仅当 getChildFragmentManager() 方法在 android.support.v4.app.Fragment 中可用时才能使用“childFragmentManager”参数
我知道,已经有很多关于这个主题的论坛帖子,但没有一个能解决我的问题 我的代码是这样的: private SectionsPagerAdapter myAdapt; private ViewPager
问题 根据 Google 的文档: You can now embed fragments inside fragments. This is useful for a variety of situ
在 fragment 中,我尝试在静态方法中使用 getChildFragmentManager()。但它显示错误并建议我使方法不是静态的。 Non static method getChildFra
我正在使用 getChildFragmentManager()在针对 API 级别 19 编译的应用中,最低 SDK 设置为 14。 getChildFragmentManager()在 API 17
我正在尝试使用 FragmentPagerAdapter 实现 ViewPager,其中 ViewPager 本身位于 fragment 内。我在文档中读到应该可以使用最新的支持库和使用嵌套 frag
我正在使用 Fragments 来更改应用程序中的场景,并且遇到了当按下手机后退按钮时应用程序关闭的问题。我该如何做到这一点,以便当按下后退按钮时,上一个 fragment 会打开。 我搜索了解决方案
按后退按钮后,单击按钮时显示的新 fragment 不会关闭,而是关闭整个应用程序。该按钮位于三个选项卡之一内。 mainActivity.java、HeroesFragment(具有三个选项卡的 f
我使用 getChildFragmentManager()、containerId 和方法 .add() 在父 fragment 代码中创建了一个子 fragment 。然后我尝试使用 childFr
这个问题在这里已经有了答案: What is difference between getSupportFragmentManager() and getChildFragmentManager()
我有一个 SherlockFragmentActivity,这个 Activity 有一个 SectionsPagerAdapter 和一个 ViewPager。当我使用 getChildFragme
我和 Navigating back to FragmentPagerAdapter -> fragments are empty 有同样的问题但想澄清一下使用 getChildFragmentMan
我正在使用 class baseactivity extends Activity { //some stuffs is here, so i cannot Extend Fragment
我使用 FragmentPagerAdapter 在我的 ViewPgaer 中有 4 个 fragment 。我尝试在持续延迟后添加每个 fragment ,以便在切换底部栏选项卡时获得无抖动的动画
当需要使用 getSupportFragmentManager() 来支持较低的 API 级别时,我认为使用 getChildFragmentManager() 方法。此方法如何支持所有 API 级别
如何在 kotlin fragment 类中使用 getChildFragmentManager()? 我知道这是非常基本的问题。但是没有找到这方面的文件。我在谷歌和 SO 中搜索但没有找到结果。 最
我正在用 maven 构建 android 项目。但是我发现当我在v4.Fragment中调用getChildFragmentManager时,提示找不到这个方法。我怀疑 support-v4 包是否
我有 viewPager,其中包含 fragment ,每个 fragment 都有 viewpager 来显示图像和横幅 现在我传递给每个 fragment 图像适配器 getChildFragme
我正在开发一个 android 应用程序,每个选项卡中都有 TabHost 和 FragmentActivity。 在我的第一个选项卡中,我使用 ViewPager 指示器和按钮初始化 fragmen
我是一名优秀的程序员,十分优秀!