如何使用后退堆栈或获取带有此特定寻呼机适配器的 getChildFragmentManager() 以使用后退按钮?



我正在使用片段来更改应用程序中的场景,并且遇到了按下手机后退按钮时应用程序关闭的问题。当按下后退按钮时,我将如何做到这一点,上一个片段打开。

我搜索了解决方案,有很多解决方案,例如使用getChildFragmentManager或Back Stack。我只是不知道如何为我的特定状态寻呼机适配器实现它,我遵循了 youtube 视频教程。

部分状态页r适配器.java:

public class SectionsStatePagerAdapter extends FragmentStatePagerAdapter {
private final ArrayList<Fragment> mFragmentList = new ArrayList<>();
private final ArrayList<String> mFragmentTitleList = new ArrayList<>();
public SectionsStatePagerAdapter(@NonNull FragmentManager fm, int behavior) {
super(fm, behavior);
}
public SectionsStatePagerAdapter(FragmentManager supportFragmentManager) {
super(supportFragmentManager);
}
public void addFragment(Fragment fragment, String title){
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}

@NonNull
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
}

主活动.java:

public class MainActivity extends AppCompatActivity implements MyRecyclerViewAdapter.ItemClickListener {
public SectionsStatePagerAdapter mSectionsStatePagerAdapter;
private ViewPager mViewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//Fragment Stuff:
mSectionsStatePagerAdapter = new SectionsStatePagerAdapter(getSupportFragmentManager());
mViewPager = findViewById(R.id.container);
//SetUpPager:
setupViewPager(mViewPager);
}

private void setupViewPager(ViewPager viewPager){
SectionsStatePagerAdapter adapter = new SectionsStatePagerAdapter(getSupportFragmentManager());
adapter.addFragment(new MainPageFragment(),"MainPage"); //0
adapter.addFragment(new CoffeePageFragment(),"CoffeePage"); //1
adapter.addFragment(new RegularCoffeeFragment(),"RegularCoffeePage"); //2
viewPager.setAdapter(adapter);
}

public void setViewPager(int fragmentNumber){
mViewPager.setCurrentItem(fragmentNumber);
}
}

CoffeePageFragment.java:

public class CoffeePageFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.content_coffee_page,container,false);
btnRegularCoffee = view.findViewById(R.id.regular_coffee_button);

btnRegularCoffee.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((MainActivity)getActivity()).setViewPager(2);
}
});
return (view);
}
}

总之,我该如何使当按下设备后退按钮时,它将返回到上一个片段?

在以前版本的AppCompatActivity实现中,覆盖活动中的onBackPressed()就足够了,较新的版本要求实现OnBackPressedCallback,如下所示: https://developer.android.com/reference/androidx/activity/OnBackPressedDispatcher.html

public class FormEntryFragment extends Fragment {
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
OnBackPressedCallback callback = new OnBackPressedCallback(
true // default to enabled
) {
@Override
public void handleOnBackPressed() {
showAreYouSureDialog();
}
};
requireActivity().getOnBackPressedDispatcher().addCallback(
this, // LifecycleOwner
callback);
}
}

不过,在Activity级别使用onBackPressed可能仍然可以。

相关内容

  • 没有找到相关文章

最新更新