【问题标题】:Inside fragment ViewPager takes long time to load child fragment内部片段 ViewPager 需要很长时间才能加载子片段
【发布时间】:2017-01-30 06:33:35
【问题描述】:

我的问题是加载数据需要很长时间并且仅在我滚动视图寻呼机时才显示。有几次我已经使用了 asynctask 但没有工作。更改标签后,我调用了相同的片段,有人帮我吗??

Here, is first time loaded data

After changing tab call same fragment

这是我的 ViewPager 适配器

public class AdapterCategoryViewPager extends FragmentPagerAdapter {
Context context;
private List<Fragment> fragmentList;
private List<Type> typeList;

public AdapterCategoryViewPager(FragmentManager fm, Context context, List<Fragment> fragmentList, List<Type> typeList) {
    super(fm);
    this.context = context;
    this.fragmentList = fragmentList;
    this.typeList = typeList;
}


@Override
public Fragment getItem(int position) {
    return fragmentList.get(position);
}

@Override
public CharSequence getPageTitle(int position) {
    return typeList.get(position).getType().toString();
}

@Override
public int getCount() {
    return fragmentList.size();
}
}

这是我在异步任务上调用此函数的类别的片段

private void setData(View v)
{
    addWomenCategory();
    ll_list.removeView(v);
    gridView.removeView(v);
    gridView.setMode(PullToRefreshBase.Mode.PULL_FROM_END);
    adapterCategory=new AdapterCategory(v.getContext(),categoryArrayList,height,width);
    gridView.setAdapter(adapterCategory);
    g=(GridView) gridView.getRefreshableView();
    g.setHorizontalSpacing(h7);
    g.setVerticalSpacing(h7);
   // g.setEnabled(false);

    gridView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<GridView>() {
        @Override
        public void onRefresh(final PullToRefreshBase<GridView> refreshView) {
            gridView.postDelayed(new Runnable() {
                @Override
                public void run() {
                    refreshView.getLoadingLayoutProxy().setRefreshingLabel("Loding Data...");
                    refreshView.getLoadingLayoutProxy().setReleaseLabel("Refresh complete");
                    addWomenCategory();
                    adapterCategory.notifyDataSetChanged();
                    gridView.setRefreshing(false);
                    gridView.onRefreshComplete();

                }
            },2000);
        }
    });
}

这是我的 HomeFragment,它实际上在数组列表中添加了片段类别,我也在异步任务中调用了这个函数

private void setData(View v)
{
    addType();
    pager.setOffscreenPageLimit(3);
    adapterType=new AdapterType(typeArrayList,v.getContext(),height,width);
    fragmentList.add(new FragmentListCategory());
    fragmentList.add(new FragmentMenListCategory());
    fragmentList.add(new FragmentKidListCategory());
    fragmentList.add(new FragmentListCategory());
    fragmentList.add(new FragmentMenListCategory());
    fragmentList.add(new FragmentKidListCategory());

    pager.setAdapter(new AdapterCategoryViewPager(getFragmentManager(),v.getContext(),fragmentList,typeArrayList));

   tabs.setViewPager(pager);
    setUpTabStrip(v);


}

【问题讨论】:

  • 图片是存储在本地还是从互联网上获取的?
  • 图片保存在drawable文件夹中
  • 是单张图片还是根据大小不同的图片?
  • 单张图片@Vidya Sagar
  • 我也遇到过同样的问题。 Android 会根据屏幕分辨率自动尝试调整图像大小,这有时会导致视图填充延迟...使用在线资源并为每种分辨率生成图像,例如 hdpi、mdpi、xhdpi、xxhdpi 和 xxxhdpi。使用它们,您的问题就会得到解决

标签: android android-viewpager fragment


【解决方案1】:

我使用通用图像加载器库来显示图像,并且每次都在适配器中初始化它的对象来解决这个问题我在主活动的 onCreate() 方法中的整个应用程序中只初始化该配置对象一次

【讨论】:

  • 是的。这是在单例应用程序类中配置 UIL 的正确方法。
  • 考虑在 onCreateView 方法上初始化它
【解决方案2】:

由于 addWomenCategeory() 是一个异步任务,主线程中的代码不会等待结果。 考虑移动代码

adapterCategory.notifyDataSetChanged(); gridView.setRefreshing(false); gridView.onRefreshComplete();

到 addWomencategory() 方法,您从后端接收结果

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    相关资源
    最近更新 更多