嗨,我有一個帶有按鈕的活動 A,該按鈕在啟用 ActionBar 和向上按鈕的情況下發送到活動 B,此活動具有帶有片段的選項卡和一個發送到與選項卡無關的新片段 C 的按鈕。通過單擊后退按鈕,它應該回傳到選項卡。后退按鈕起作用并顯示選項卡但不顯示包含。我做錯了什么?這是一些代碼。提前致謝。活動乙
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) {
}
});
}
}
uj5u.com熱心網友回復:
你FragmentManager在創建你的時候用錯了SectionsPagerAdapter,你應該在getChildFragmentManager()這里使用:
SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(
getFragmentManager(), // This is the problem
clientes, mViewModel,clientesplan
);
getFragmentManager()實際上是指FragmentManager您TabsFragment已添加到的 - 這就是不推薦使用該方法并替換為 的原因getParentFragmentManager(),這更明確地說明了這FragmentManager意味著什么。
每當您創建的片段完全包含在另一個片段的布局中時,它需要通過添加到getChildFragmentManager(). 這確保它正確地通過生命周期狀態(例如在其父級重新創建其視圖時重新創建其視圖)并確保正確保存和恢復片段的狀態。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/323358.html
標籤:安卓 android-fragments 返回键 android-tabs android-developer-api
