在Android应用程序中,我有一个动态viewPager,可能会显示一个动态数量的片段(片段编号在实例化之前是固定的)。 这个viewPager由4个(固定数量)的subViewPager组成。每个subViewPager都可以容纳1-5个片段。这意味着片段的整个计数最多可以达到20项。
对于Info:片段可以只是一组字段,直到画布驱动的视图,用户与触摸交互,添加了位图显示
我尝试使用FragmentPagerAdapter(用于主视图和子视图)进行第一次实现,它工作正常,但需要大量内存(120 MB分配的堆内存)
我现在正在使用FragmentStatePagerAdater来减少内存分配
我的问题是,在mainViewPager的Fragment中处理的subViewPager可能会被导航杀死(这是statepageradapter为释放内存所期望的)(它们在OnCreateView中初始化)。
=>关键是我需要该对象能够使用按钮滑动:
为了传递给下一个片段,我需要访问mainViewPager,然后访问mainViewPager当前项的subViewPager,以包含当前可见的片段。
问题是subViewPager的保留片段可能被杀死,因此viewPager为null。 在哪里以及如何处理subviewpager以启用访问subviewpager PLUS可以通过杀死不可见的片段来释放内存。
以下是代码部分:
public class MySubViewPagerFragment extends Fragment {
private MySubFragmentPagerStateAdapter mSubPagerStateAdapter;
private ViewPager mPagerSub;
private TitlePageIndicator mIndicatorSub;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.vp_sub, container, false);
int id = getArguments().getInt("id");
// Creation de l'adapter
mSubPagerStateAdapter = new MySubFragmentPagerStateAdapter(getChildFragmentManager(), ((MainActivity) getActivity()).getConfigList().get(id));
// Creation du Pager
mPagerSub = (ViewPager) v.findViewById(R.id.vp_sub);
// Affectation de l'adapter au ViewPager
mPagerSub.setAdapter(this.mSubPagerStateAdapter);
TitlePageIndicator indicator = (TitlePageIndicator) v.findViewById(R.id.tpi_sub);
indicator.setViewPager(mPagerSub);
mIndicatorSub = indicator;
return v;
}
public boolean swipNextFragment() {
boolean result = false;
int c = mPagerSub.getCurrentItem();
if (c < (mPagerSub.getAdapter().getCount() - 1)) {
result = true;
new Handler().post(new Runnable() {
@Override
public void run() {
mPagerSub.setCurrentItem(mPagerSub.getCurrentItem() + 1);
}
});
}
return result;
}
}
我试图将subViewPager放在活动级别,但没有解决任何问题。
您是否有任何共同使用案例/解决方案或建议?
这是一个具有相同架构的示例项目。 https://github.com/afaucogney/NestedAndroidViewPagers
PS:如果你看到一些优惠,请随时向我推荐其他优化建议。