背景我有一个使用片段的 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();
添加回答
举报
0/150
提交
取消