2017-01-30 20 views
2

У меня проблема с загрузкой данных и отображением только при прокрутке пейджера. Несколько раз я уже использовал asynctask, но не работал. После изменения вкладки, я назвал тот же фрагмент, кто-нибудь мне помог?Внутренний фрагмент ViewPager занимает много времени, чтобы загрузить дочерний фрагмент

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(); 
} 
} 

Вот мой Fragment для категории этой функции я призываю асинхронной задачи

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, который на самом деле добавить категорию фрагментов в списке массива этой функции я также называется в AsyncTask

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); 


} 
+0

Изображения хранятся локально или вы получаете их из Интернета? –

+0

изображение, хранящееся в папке с возможностью удаления –

+0

Это одно изображение или разные изображения в зависимости от размера? –

ответ

0

Как addWomenCategeory() является асинхронным задачей, код в основном потоке не ждет для результата. переместить код

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

к addWomencategory() метод, в котором, как вы получите результат от Админцетра

1

Я использовал универсальную библиотеку imageloader для отображения изображения и я был инициализирован его объект каждый раз, когда адаптер для решения этой проблемы я инициализирую этот объект конфигурации только один раз во всем приложении в методе onCreate() основного действия

+0

Да. Это правильный способ настройки вашего UIL в вашем классе приложений singleton. – Piyush

+0

Рассмотрите возможность инициализации метода onCreateView –