背景我有一個(gè)使用片段的 android 應(yīng)用程序。我正在使用一個(gè)單獨(dú)的 FragmentPagerAdapter(即作為一個(gè)單獨(dú)的類,在 MainActivity 之外)。主活動(dòng).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;}}問(wèn)題我需要從片段#2(最終目標(biāo)是更改刷新的,也就是說(shuō),片段#3的視圖上碎片#2的用戶發(fā)起可見只要用戶進(jìn)入碎片#3。我曾嘗試一旦可見,就分離/附加片段 #3 本身,如下所示:@Overridepublic void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser) { getFragmentManager().beginTransaction().detach(this).attach(this).commit(); }不幸的是,a) 這會(huì)降低性能,因?yàn)樵趯?dǎo)航過(guò)程中會(huì)出現(xiàn)“口吃”;b) 它不能可靠地工作。有些東西(某些按鈕的文本)沒(méi)有刷新,出于某種原因我無(wú)法弄清楚。無(wú)論如何,我發(fā)現(xiàn)強(qiáng)制刷新/重繪唯一 100% 可靠的方法是重新啟動(dòng)活動(dòng)(例如,通過(guò)用戶需要按下前一個(gè)片段 #2 上的保存按鈕上的 onClickListener)。但這會(huì)重新啟動(dòng)片段 #1 上的 Activity我的問(wèn)題考慮到我使用的是單獨(dú)的 FragmentPagerAdapter 的事實(shí),我如何重新啟動(dòng)此特定片段(#3)上的活動(dòng)?我已經(jīng)研究了其他幾個(gè)問(wèn)題/答案,例如:https : //stackoverflow.com/a/36064344但是當(dāng) FragmentPagerAdapter 在一個(gè)單獨(dú)的類上時(shí),我如何實(shí)現(xiàn)這樣的事情(在意圖調(diào)用上添加額外內(nèi)容)?或者,我還能做些什么來(lái)刷新片段視圖?如果您需要額外的信息或代碼,請(qǐng)告訴我,我很樂(lè)意添加說(shuō)明。
1 回答

繁華開滿天機(jī)
TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超4個(gè)贊
嗯,不是那么簡(jiǎn)單......
this.recreate();不僅重新啟動(dòng)活動(dòng),而且還記住片段位置。
以防萬(wàn)一其他人需要這個(gè),當(dāng)你從片段工作時(shí),你需要這樣使用它:
首先聲明包含相關(guān)片段的活動(dòng)。例如
public class frag1 extends Fragment {
...
Activity mactivity;
@Override
public void onAttach(Activity MainActivity) {
super.onAttach(MainActivity);
mactivity = MainActivity;
}
然后而不是getActivity().recreate();簡(jiǎn)單地使用mactivity.recreate();
添加回答
舉報(bào)
0/150
提交
取消