ViewPager滑动不流畅

3
我在我的Activity中实现了一个ViewPager,当滚动时,它会将一组数据加载到适配器中,并在ListView中显示它们。一切都运行良好,但我似乎无法找出如何使其更加高效,因为当滚动时,视图会冻结,但例如在GMAIL应用程序中,在电子邮件之间滚动时滚动非常流畅。
以下是我使用的代码:
Activity:
在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;
}

页面变化监听器:

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

public final int getCurrentPage() {
    return currentPage;
}

请尝试使用 https://github.com/Benjamin-Dobell/VelocityViewPager。 - Dmitriy Puchkov
谢谢您的快速回复,但您认为我的代码是否高效? - Rashad.Z
你是否正确处理了ListView中的数据加载,我的意思是在后台进行?因为你的代码看起来没问题,除非ListView本身有延迟。 - Ankit Bansal
你的代码看起来很好。 - Thealon
数据在onCreate时被加载(一次性)。你的意思是我应该在滚动时动态地加载数据吗? - Rashad.Z
pager.setOffscreenPageLimit(int limit); 使用它,当滑动页面适配器创建视图并保存在内存中时,限制视图数量。 - 이남웅
2个回答

0

首先,您需要像这样使用占位符。

在您的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;
}

在ListView中尝试异步加载数据的第二次尝试


我应该在instantiateItem方法中加载AsyncTask吗?因为我尝试过这样做,但是我得到了一个空指针异常,因为return语句在异步任务完成之前被执行。 - Rashad.Z
你应该在ListView的适配器中使用AsyncTask来加载数据。 - Dmitriy Puchkov

0
设置 myPager.setOffscreenPageLimit(1);

这个有帮助,但并没有完全解决问题。 - Rashad.Z
你在ViewPager中加载图片吗? - Patel Hiren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接