مکث در باز شدن اکتیویتی حاوی ViewPager و RecyclerView
درود.
من یک اکتیویتی حاوی یک ViewPager دارم که با دو فرگمنت پر میشه. فرگمنت اول ثابته و فرگمنت دوم یک RecyclerView رو در بر داره که اطلاعاتی رو از پایگاه داده میخونه و در قالب 3 یا 4 یا هر تعداد صفحه که لازمه در ViewPager نمایش میده.
مشکلی که وجود داره اینه که اکتیویتی مذکور بعد از تاخیری چند ثانیه ای باز میشه. علتش اینه که اطلاعات رو میخونه و غیره.
من برای رفع مشکل لگ در هنگام سوایپ کردن از متد setOffscreenPageLimit در ViewPager استفاده کردم که این هم خودش مزید بر علت شده. تلاشهای مکرر و در قالبهای مختلفی رو انجام دادم که اگر بخوام توضیح بدم خیلی طولانی میشه. خواستم مطرح کنم اگر دوستان راه حلی برای این موضوع دارند باهام درمیون بگذارند.
سپاس.
--- اکتیویتی:
public class ActivityProducts extends ActivityBase {
private ViewPager viewPager;
private PagerAdapter pagerAdapter;
private SmartTabLayout smartTabLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
G.layoutStub(R.layout.activity_products);
prepare();
}
private void prepare() {
pagerAdapter = new PagerAdapter(getSupportFragmentManager(), G.context);
viewPager = (ViewPager) findViewById(R.id.viewPager);
viewPager.setAdapter(pagerAdapter);
viewPager.setCurrentItem(pagerAdapter.getCount());
viewPager.setOffscreenPageLimit(5);
smartTabLayout = (SmartTabLayout) findViewById(R.id.smartTabLayout);
smartTabLayout.setViewPager(viewPager);
}
class PagerAdapter extends FragmentPagerAdapter {
Context context;
int category = 0;
String[][] cats = {
{"Mens", "1"},
{"Womens", "2"},
{"Childs", "3"},
};
public PagerAdapter(FragmentManager fm, Context context) {
super(fm);
this.context = context;
}
@Override
public int getCount() {
return cats.length;
}
@Override
public Fragment getItem(int position) {
if ((position + 1) == cats.length) {
return new FragmentDashboard();
} else {
int catId = Integer.parseInt(cats[position][1]);
FragmentProducts fragment = new FragmentProducts();
fragment.setCatId(catId);
return fragment;
}
}
@Override
public CharSequence getPageTitle(int position) {
return cats[position][0];
}
}
}
--- فرگمنت:
public class FragmentProducts extends Fragment {
private int catId = 0;
private View view;
private ProductAdapter adapter;
private List<Product> products;
private ProductDbh productDbh;
private RecyclerView rv;
@Override
public View onCreateView(final LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
view = inflater.inflate(R.layout.fragment_products, container, false);
productDbh = new ProductDbh(G.context);
products = productDbh.readAll(catId);
adapter = new ProductAdapter(products);
rv = (RecyclerView) view.findViewById(R.id.rv);
rv.setLayoutManager(new LinearLayoutManager(G.context));
rv.setAdapter(adapter);
return view;
}
public void setCatId(int catId) {
this.catId = catId;
}
}
--- آداپتور هم چیز خاصی نداره چون عملا فعلا چیزی رو پر نمیکنه.
@admirallam اطلاعات رو قبل از ورود به اکتیویتی خوندم ، اما تاثیر خاصی نداره. به نظرم این مشکل بیشتر به حافظه ربط پیدا میکنه.
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .