pfrproject

viewPager.setOffscreenPageLimit

4 ارسال در این موضوع قرار دارد

ارسال شده در (ویرایش شده)

سلام خدمت کاربران گرامی انجمن p30droid

دوستان بنده توی viewpager   شش تا فرگمنت دارم حالا می خواهم کاربر وقتی تب ها رو می بینه به ترتیب لود بشه و بعدن کش هم بشه و می دونم میشه از 

viewPager.setOffscreenPageLimit(6);

استفاده کنم.

اما این کار اشتباه هست چون تعداد 6 تا requst به سرور ارسال میشه و باعث میشه jsons api من خیلی دیر اطلاعات رو دریافت کنه چطور میشه کاری کرد که وقتی کاربر فرگمنت ها رو می بینه به ترتیتب لود بشه و بعدن کش هم بشه و فقط یک requst ارسال بشه به سمت سرور مثل اپلیکیشن دیجی استایل که وقتی تب ها رو مشاهده می کنید بعدن کش میشه 

لطفا اگر کسی چیزی میدونه لطفا کمک کنه سپاس

ویرایش شده در توسط pfrproject

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

به اینصورت بنویسید

public class MainActivity extends AppCompatActivity {


private TabLayout tabLayout;
private ViewPager viewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
   

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);

    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);
    tabLayout.setOnTabSelectedListener(onTabSelectedListener(viewPager));

    
}



private TabLayout.OnTabSelectedListener onTabSelectedListener(final ViewPager viewPager) {

    return new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    };
}

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new OneFragment(), "ONE");
    adapter.addFragment(new TwoFragment(), "TWO");
    adapter.addFragment(new ThreeFragment(), "THREE");
    viewPager.setAdapter(adapter);
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    onTabSelectedListener(viewPager);
}




class ViewPagerAdapter extends FragmentPagerAdapter {
    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);
    }
}
}

 

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در 29 دقیقه قبل، Farzad Sarseifi گفته است :

به اینصورت بنویسید


public class MainActivity extends AppCompatActivity {


private TabLayout tabLayout;
private ViewPager viewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
   

    viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);

    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);
    tabLayout.setOnTabSelectedListener(onTabSelectedListener(viewPager));

    
}



private TabLayout.OnTabSelectedListener onTabSelectedListener(final ViewPager viewPager) {

    return new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            viewPager.setCurrentItem(tab.getPosition());
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    };
}

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new OneFragment(), "ONE");
    adapter.addFragment(new TwoFragment(), "TWO");
    adapter.addFragment(new ThreeFragment(), "THREE");
    viewPager.setAdapter(adapter);
    viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
    onTabSelectedListener(viewPager);
}




class ViewPagerAdapter extends FragmentPagerAdapter {
    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);
    }
}
}

 

متاسفانه این ها نحوه پیاده سازی هست که بنده با پیاده سازی مشکلی ندارم و کامل هم این مورد پیاده کرده ام. ولی مشکل بنده این هست چطور توی 

viewPager.setOffscreenPageLimit(3);

به صورت دستی محدود نکنم یعنی منظور هر فرگمنت رو که میبینه یک دونه به مقدار اندیس limit اضافه بشه و همون فرگمنتی که دیده شده دیگه مثل اپلیکیشن دیجی استایل باقی بمونه توی مموری و حالا دوباره اگر فرگمنت دیگه ای توی viewpager دید دوباره یک مقدار limit بشه 

مثلا من شش تا فرگمنت دارم و وقتی برنامه من اجرا میشه میگیم 3 تا فرگمنت رو توی حافظه نگه دار 

viewPager.setOffscreenPageLimit(3);

حالا باید به مقدار 3 باز اضافه بشه اما چطور چون فقط 3 تا فرگمنت رو نگاه می داره و بقیه دوباره با برگشت به عقب refresh میشن.

سورس کد بنده :

tabLayout = (TabLayout) findViewById(R.id.tablayout);
viewPager = (ViewPager) findViewById(R.id.viewpager);
fragment_adapter adapter = new fragment_adapter(getSupportFragmentManager());
viewPager.setOffscreenPageLimit(3);
viewPager.setDrawingCacheEnabled(true);
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);
viewPager.setCurrentItem(6);
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {@Override
    public void onTabSelected(TabLayout.Tab tab) { } @Override
public void onTabUnselected(TabLayout.Tab tab) {} @Override
public void onTabReselected(TabLayout.Tab tab) {} });

سورس کد فرگمنت یک و بقیه هم به همین صورت هستن 

public class fragment_channel extends Fragment{

    View view;
    RecyclerView recyclerView;
    channel_server jsonrequstvolleyserver;
    private RecyclerView.LayoutManager layoutManager;
    private RequestQueue requestQueue;
    WaveSwipeRefreshLayout mWaveSwipeRefreshLayout;
    SmoothProgressBar smoothProgressBar;
    ProgressWheel progressWheel;
    public fragment_channel() {
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
         Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.fragment_recyclerview, container, false);
            recyclerView = (RecyclerView) view.findViewById(R.id.recymain);
            mWaveSwipeRefreshLayout = (WaveSwipeRefreshLayout) view.findViewById(R.id.main_swipe);
            smoothProgressBar = (SmoothProgressBar) view.findViewById(R.id.prograss);
            progressWheel = (ProgressWheel) view.findViewById(R.id.progress_wheel);
            recyclerView.setHasFixedSize(true);
            recyclerView.setItemAnimator(new DefaultItemAnimator());
            layoutManager = new LinearLayoutManager(getActivity());
            recyclerView.setLayoutManager(layoutManager);
            requestQueue = Volley.newRequestQueue(getActivity());
            String category = "post";
            int check = 0;
            jsonrequstvolleyserver = new channel_server(getActivity(), category, recyclerView, requestQueue, smoothProgressBar, progressWheel, mWaveSwipeRefreshLayout, check);
            jsonrequstvolleyserver.cheeck();
            jsonrequstvolleyserver.getData();
            mWaveSwipeRefreshLayout.setWaveColor(getResources().getColor(R.color.white));
            mWaveSwipeRefreshLayout.setOnRefreshListener(new WaveSwipeRefreshLayout.OnRefreshListener() {
                @Override
                public void onRefresh() {
                    String category = "post";
                    int check = 1;
                    jsonrequstvolleyserver = new channel_server(getActivity(), category, recyclerView, requestQueue, smoothProgressBar, progressWheel, mWaveSwipeRefreshLayout, check);
                    jsonrequstvolleyserver.getData();
                    jsonrequstvolleyserver.cheeck();

                }
            });
            return view;



    }
    public static fragment_channel newInstance() {
        Bundle args = new Bundle();
        fragment_channel fragment = new fragment_channel();
        fragment.setArguments(args);
        return fragment;
    }
public class fragment_adapter extends FragmentStatePagerAdapter {

    public fragment_adapter(FragmentManager fm) {
        super(fm);
    }
    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 5:
                return fragment_channel.newInstance();
            case 4:
                return fragment_group_telegram.newInstance();
            case 3:
                return Frgament_robots.newInstance();
            case 2:
                return fragment_sticker.newInstance();
            case 1:
                return fragment_cahnnel_content.newInstance();
            case 0:
                return fragment_tarfand_telegram.newInstance();
        }
        return null;
    }

    @Override
    public int getCount() {
        return 6;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        switch (position) {
            case 5:
                return "خبری";
            case 4:
                return "ورزشی";
            case 3:
                return "مهندسی";
            case 2:
                return "ریاضی";
            case 1:
                return "شیمی";
            case 0:
                return "تکنولوژی";

            default:
                return "";
        }

    }
}

 

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

از این کتابخونه استفاده کنید https://drive.google.com/file/d/0B3utJsLFk7yKOS1vclV0YTR1NTA/view

Steps:

1) First Download the CustomViewPager Class from this link.

2) Use that class like this:

In Java:

CustomViewPager mViewPager;
mViewPager = (CustomViewPager) findViewById(R.id.swipePager);
mViewPager.setOffscreenPageLimit(0);

In XML:

<com.yourpackagename.CustomViewPager 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/swipePager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

Now only one page will be loaded at once.

Thank you.

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری