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

背景

我有一个使用片段的 android 应用程序。我正在使用一个单独的 FragmentPagerAdapter(即作为一个单独的类,在 MainActivity 之外)。


主活动.java


protected 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.java


public SectionsPagerAdapter(FragmentManager fm) {

    super(fm);

}


@Override

public 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;

    }

}


@Override

public int getCount() {

    return 5;

}

}

问题

我需要从片段#2(最终目标是更改刷新的,也就是说,片段#3的视图上碎片#2的用户发起可见只要用户进入碎片#3。我曾尝试一旦可见,就分离/附加片段 #3 本身,如下所示:


@Override

public 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 在一个单独的类上时,我如何实现这样的事情(在意图调用上添加额外内容)?或者,我还能做些什么来刷新片段视图?


如果您需要额外的信息或代码,请告诉我,我很乐意添加说明。


侃侃尔雅
浏览 172回答 1
1回答

繁华开满天机

嗯,不是那么简单......this.recreate();不仅重新启动活动,而且还记住片段位置。以防万一其他人需要这个,当你从片段工作时,你需要这样使用它:首先声明包含相关片段的活动。例如public class frag1 extends Fragment {...Activity mactivity;@Overridepublic void onAttach(Activity MainActivity) {    super.onAttach(MainActivity);    mactivity = MainActivity; }然后而不是getActivity().recreate();简单地使用mactivity.recreate();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java