带有片段的 Android Up 按钮未显示完整片段
Posted
技术标签:
【中文标题】带有片段的 Android Up 按钮未显示完整片段【英文标题】:Android Up button with fragments not showing complete fragment 【发布时间】:2021-12-02 09:56:17 【问题描述】:嗨,我有一个带有按钮的活动 A,该按钮发送到带有 ActionBar 和向上按钮的活动 B,此活动具有带有片段的选项卡和一个发送到与选项卡无关的新片段 C 的按钮。通过单击后退按钮,它应该返回到选项卡。后退按钮有效并显示选项卡,但不显示包含。我做错了什么?这是一些代码。 提前致谢。 活动B
public class BackActivity extends AppCompatActivity
...
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_back);
// get fragment manager
myChildToolbar =(Toolbar)findViewById(R.id.my_child_toolbar2);
setSupportActionBar(myChildToolbar);
// Get a support ActionBar corresponding to this toolbar
ActionBar ab = getSupportActionBar();
// Enable the Up button
ab.setDisplayHomeAsUpEnabled(true);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
myChildToolbar.setTitle(R.string.menu_ver_lista);
Bundle bundle=new Bundle();
bundle.putInt(NuevoinformeFragment.INFORMESEL,datosRecuperados.getInt(NuevoinformeFragment.INFORMESEL));
bundle.putString(TabsFragment.ARG_MUESTRA,"true");
TabsFragment detailFragment = new TabsFragment();
detailFragment.setArguments(bundle);
ft.add(R.id.back_fragment, detailFragment);
ft.commit();
@Override
public boolean onSupportNavigateUp()
onBackPressed();
return false;
标签片段
TabLayout tabs;
ViewPager viewPager;
private ListaDetalleViewModel mViewModel;
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState)
View root = inflater.inflate(R.layout.fragment_lista_tabs, container, false);
mViewModel = new ViewModelProvider(requireActivity()).get(ListaDetalleViewModel.class);
return root;
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState)
Bundle bundle = getArguments();
viewPager = view.findViewById(R.id.view_pager);
tabs = view.findViewById(R.id.tabs);
tabs.setupWithViewPager(viewPager);
mViewModel.cargarPestañas(ciudadNombre).observe(getViewLifecycleOwner(), words ->
configureTabLayout();
);
private void configureTabLayout()
SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter( getFragmentManager(),clientes, mViewModel,clientesplan);
viewPager.setAdapter(sectionsPagerAdapter);
viewPager.addOnPageChangeListener(new
TabLayout.TabLayoutOnPageChangeListener(tabs));
tabs.addOnTabSelectedListener(new
TabLayout.OnTabSelectedListener()
@Override
public void onTabSelected(TabLayout.Tab tab)
viewPager.setCurrentItem(tab.getPosition());
@Override
public void onTabUnselected(TabLayout.Tab tab)
@Override
public void onTabReselected(TabLayout.Tab tab)
);
【问题讨论】:
【参考方案1】:您在创建SectionsPagerAdapter
时使用了错误的FragmentManager
,您应该在此处使用getChildFragmentManager()
:
SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(
getFragmentManager(), // This is the problem
clientes, mViewModel,clientesplan
);
getFragmentManager()
实际上是指您的TabsFragment
已添加到的FragmentManager
- 这就是该方法为deprecated 并替换为getParentFragmentManager()
的原因,这更明确地说明了FragmentManager
的含义。
当您创建的片段完全包含在另一个片段的布局中时,它需要通过添加到getChildFragmentManager()
成为子片段。这可以确保它正确地通过生命周期状态(例如在其父级重新创建其视图时重新创建其视图)并确保片段的状态被正确保存和恢复。
【讨论】:
你说的太对了。我已经看到 getFragmentManager 已被弃用,但 android studio 已经生成了选项卡,我没有移动任何东西,因为我正在学习。谢谢以上是关于带有片段的 Android Up 按钮未显示完整片段的主要内容,如果未能解决你的问题,请参考以下文章
Listview 项目未在 Fragment Android 中显示
带有片段和底部导航栏的 Android FloatingActionButton
Android Navigation java.language.IllegalStateException 片段类未设置