为了账号安全,请及时绑定邮箱和手机立即绑定

使用单独的 FragmentPagerAdapter 时重新启动特定片段上的活动

使用单独的 FragmentPagerAdapter 时重新启动特定片段上的活动

侃侃尔雅 2021-08-25 16:19:06
背景我有一个使用片段的 android 应用程序。我正在使用一个单独的 FragmentPagerAdapter(即作为一个单独的类,在 MainActivity 之外)。主活动.javaprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.MainActivity);    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());    mViewPager = (ViewPager) findViewById(R.id.container);    mViewPager.setAdapter(mSectionsPagerAdapter);    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabLayout);    tabLayout.setupWithViewPager(mViewPager);}SectionsPagerAdapter.javapublic SectionsPagerAdapter(FragmentManager fm) {    super(fm);}@Overridepublic Fragment getItem(int position) {    switch (position) {        case 0:            return new frag1();        case 1:            return new frag2();        case 2:            return new frag3();        case 3:            return new frag4();        case 4:            return new frag5();        default:            return null;    }}@Overridepublic int getCount() {    return 5;}}问题我需要从片段#2(最终目标是更改刷新的,也就是说,片段#3的视图上碎片#2的用户发起可见只要用户进入碎片#3。我曾尝试一旦可见,就分离/附加片段 #3 本身,如下所示:@Overridepublic void setUserVisibleHint(boolean isVisibleToUser) {    super.setUserVisibleHint(isVisibleToUser);    if (isVisibleToUser) {        getFragmentManager().beginTransaction().detach(this).attach(this).commit();    }不幸的是,a) 这会降低性能,因为在导航过程中会出现“口吃”;b) 它不能可靠地工作。有些东西(某些按钮的文本)没有刷新,出于某种原因我无法弄清楚。无论如何,我发现强制刷新/重绘唯一 100% 可靠的方法是重新启动活动(例如,通过用户需要按下前一个片段 #2 上的保存按钮上的 onClickListener)。但这会重新启动片段 #1 上的 Activity我的问题考虑到我使用的是单独的 FragmentPagerAdapter 的事实,我如何重新启动此特定片段(#3)上的活动?我已经研究了其他几个问题/答案,例如:https : //stackoverflow.com/a/36064344但是当 FragmentPagerAdapter 在一个单独的类上时,我如何实现这样的事情(在意图调用上添加额外内容)?或者,我还能做些什么来刷新片段视图?如果您需要额外的信息或代码,请告诉我,我很乐意添加说明。
查看完整描述

1 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

嗯,不是那么简单......

this.recreate();不仅重新启动活动,而且还记住片段位置。


以防万一其他人需要这个,当你从片段工作时,你需要这样使用它:


首先声明包含相关片段的活动。例如


public class frag1 extends Fragment {

...

Activity mactivity;


@Override

public void onAttach(Activity MainActivity) {

    super.onAttach(MainActivity);

    mactivity = MainActivity; 

}

然后而不是getActivity().recreate();简单地使用mactivity.recreate();


查看完整回答
反对 回复 2021-08-25
  • 1 回答
  • 0 关注
  • 168 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信