ViewPager does not scroll smoothly

i has implemented a viewpager in its activity, which in scrolling loads the dataset into the adapter and displays it as a list. everything works fine, but I can't figure out how to make it more efficient because the view freezes when scrolling, but for example in a GMAIL app when scrolling between messages, the scrolling is so smooth.

Below is the code I am using:

Activity:

in oncreate

pageradapter adapter2 = new pageradapter(this, ArrayOfItems);   //ArrayOfItems is an Array containing the data that will be displayed
        ViewPager myPager = (ViewPager) findViewById(R.id.mypanelpager);
        myPager.setAdapter(adapter2);
pagechangelistener pageListener = new pagechangelistener();
        myPager.setOnPageChangeListener(pageListener);

      

pageradapter:

public pageradapter(Activity act, ArrayList <List<Item>>Arrayitems) {
    this.Arrayitems = Arrayitems;
    activity = act;
}

public int getCount() {
    return Arrayitems.size();
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
    List<Item> item = Arrayitems.get(position);
    ListView view = new ListView(activity);
    taskdetailsarrayadaptertest adapter = new taskdetailsarrayadaptertest(activity, item);
    view.setAdapter(adapter);
    view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT));
    ((ViewPager) container).addView(view, 0);
    return view;
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
    ((ViewPager) container).removeView((View) object);
}

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
    return arg0 == ((View) arg1);
}

@Override
public Parcelable saveState() {
    return null;
}

      

pagechangelistener:

@Override
public void onPageSelected(int position)
{
    currentPage = position;
    int positionTemp = position + 1;
}

public final int getCurrentPage() {
    return currentPage;
}

      

+3


source to share


2 answers


First you need to use holders like this.

in your ViewPager:



class Holder{
    ListView listView;
    Adapter adapter;
}

private ArrayList<Holder> mHolders;

//init holders

@Override
public Object instantiateItem(ViewGroup collection, int position) {
    Holder holder = mHolders.get(position);
    holder.listView.setAdapter(holder.adapter);
    collection.addView(holder.listView);
    return holder.listView;
}

      

Second attempt to asynchronously load data into listview

0


source


set myPager.setOffscreenPageLimit (1);



0


source







All Articles