gpt4 book ai didi

java - 如何使用后退堆栈或通过此特定寻呼机适配器获取 getChildFragmentManager() 以便使用后退按钮?

转载 作者:行者123 更新时间:2023-12-01 23:14:54 25 4
gpt4 key购买 nike

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

我搜索了解决方案,有很多类似使用 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);
}
}

总之,如何做到当按下设备后退按钮时,它会返回到上一个 fragment ?

最佳答案

AppCompatActivity 实现的早期版本中,覆盖 Activity 中的 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 可能仍然可以。

关于java - 如何使用后退堆栈或通过此特定寻呼机适配器获取 getChildFragmentManager() 以便使用后退按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58358538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com