我正在使用Fragments更改应用程序中的场景,并且遇到了以下问题:当按下电话后退按钮时,应用程序将关闭。当按下后退按钮时,如何打开上一个片段。
我搜索了解决方案,有很多类似的使用getChildFragmentManager或反向堆栈的方法。我只是不知道如何为我的特定状态寻呼机适配器实现它,为此我遵循了youtube视频教程。
SectionsStatePagerAdapter.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(); } }
MainActivity.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); } }
总之,当按下设备后退按钮时,它将如何回到上一个片段?
我正在使用Fragments更改应用程序中的场景,并且遇到了以下问题:当按下电话后退按钮时,应用程序将关闭。当背面...
在先前版本的AppCompatActivity
实现中,您可以在活动中覆盖onBackPressed()
,较新的版本规定要实现OnBackPressedCallback
,如下所示:https://developer.android.com/reference/androidx/activity/OnBackPressedDispatcher.html