只是片段的許多問題之一。 在Activity.onCreate()
方法中,我正在初始化一個ViewPager
,其中有兩個Fragments
。ViewPager的第二個片段尚未實例化
viewPager = (ViewPager) findViewById(R.id.viewpager);
viewPager.setOffscreenPageLimit(1);
adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new AutoFragment(), getString(R.string.song_header_automatic));
adapter.addFragment(new ManualFragment(), getString(R.string.song_header_manual));
adapter.notifyDataSetChanged();
viewPager.setAdapter(adapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
之後,我需要在ViewPager的第二個片段中的View
上執行一個操作。
((Fragment) adapter.getItem(1)).getView().findViewById(...)
但它提供了NPE,因爲用戶從不瀏覽到第二個片段,因此它尚未連接。以相同的方式訪問第一個片段的元素不會產生任何問題。
不應該setOffscreenPageLimit(1)
方法告訴Android也渲染第二個片段?
我也試過在適配器裏面沒有調用destroyItem
的超級方法,但沒有運氣,因爲問題是片段甚至沒有初始化。
public class ViewPagerAdapter extends FragmentStatePagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {}
}
我該如何強制它,以便不可見的片段被渲染?
注意:這個問題只發生在應用程序用戶,我無法重現它。我只有一次遇到這個問題,所以我認爲這是關於在正確的生命週期事件之後執行錯誤的操作。
只是嘗試使用'FragmentPagerAdapter'而不是'FragmentStatePagerAdapter' –
@EduardoHerzer任何想法,爲什麼這應該解決這個問題? – fillobotto
查看答案...太久無法做評論 –