Androidasynchronous查看传呼机加载数据

我需要一个视图寻呼机实现的解决scheme。 首先我从单个页面的数据库中加载大量的数据,所以有时在刷卡过程中减慢了刷卡频率(你需要在页面上多次刷卡),就像在后台执行取出任务一样。 我没有使用asynchronous任务来返回视图。 有没有办法延迟加载页面,只允许用户在其他页面上刷卡,但数据被延迟加载。

我的代码示例如下所示;

public Object instantiateItem(View container, int position) { View v; v = View.inflate(context,R.layout.swipearea, null); listView = (ListView)v.findViewById(R.id.MyListView); largeDataCall(); ((ViewPager)container).addView(v); return v; } 

我正在调用这个创build方法。

 pager=(ViewPager) findViewById(R.id.pagerAdapter); pager.setAdapter(new SimplePager(MyPager.this)); pager.setCurrentItem(364); 

有没有解决办法?

Solutions Collecting From Web of "Androidasynchronous查看传呼机加载数据"

我会build议与碎片(而不是直接与意见)合作。

你需要在你的片段上有一个接口来告诉他们什么时候显示:

 public interface IShowedFragment { public void onShowedFragment(); } 

使所有的片段实现该接口,并在该方法中调用您的加载器/ asyncTasks /后台任务。

然后把一个onPageChangeListener放在你的ViewPager上,当你检测到用户改变了页面时,调用你的片段的接口方法。 你有这个监听器的一些select,你可以等待viewPager停下来滑动触发你的接口调用的方法之一。

为了能够得到正确的片段来进行这个调用,从你的片段Apadter.instantiateItem(ViewGroup,int)中获取片段,如果已经加载,将返回片段。

 mPager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int position) { Fragment fragment = (Fragment) mAdapter.instantiateItem(mPager, position); if(fragment instanceof IShowedFragment){ ((IShowedFragment) fragment).onShowedFragment(); } } (...) 

就像那样,你可以用空视图准备你的片段,当你在一个幻灯片上滑动时,你开始加载数据。

我刚刚完成了一个非常类似的任务。 为了让您开始寻找解决问题的方法,请考虑以下几点:

  1. 看看你是否需要首先获取所有的数据。 随意回复一些细节,你需要加载哪些信息,以及你在做什么(把它作为一个列表显示在屏幕上?)
  2. 看看使用CursorLoader来执行繁重的任务,如数据库asynchronous提取。 这个关于interwebs的教程介绍了ContentProvider的Android方法。 最好熟悉官方的Android URI和ContentProvider文档,如果这些条款没有多大意义的话。
  3. 如果您正在使用Fragments – 查看使用FragmentStatePagerAdapter而不是传统的FragmentPagerAdapter 。 我没有使用这个适配器,但我读过,它只实例化当前可见的片段,即不是当前选定的选项卡的右侧或左侧的碎片。
  4. 看看优化你对数据库运行的查询。

ViewPager即将交换并需要一个视图时,会调用instantiateItem 。 它不必实际创造一切。 我认为,最终,懒加载是出来的。 我看到的方式,你需要在这里做两件事。

1:当用户即将到达您的页面时,在后台caching数据。 你的例子声称,364页(好主),所以我会说使用一个监听器来处理页面的变化。 当你在第363页时,开始加载数据为364.当你在364时,开始在365加载数据,并保持数据在363,以防止用户想换回。 如果数据加载速度相对较快,或者用户花费很长时间进行交换,则假设您使用asyncTask或线程来加载数据,这应该是无可估量的。

2:有一个备份默认视图,直到检索到数据才会被填充。 您需要使用选项1执行此操作,以防用户在检索数据之前加载页面。 基本上,只是有一个观点,说“加载…”或什么,直到你有数据。 要么是这样,要么是在实时填充数据。 在这种情况下,用户将看到它的构build。

无论哪种方式,我认为你需要caching一些东西,使应用程序看起来不错。

我有一个类似的问题。 一个正在加载大量数据的viewpager。 如果你不打算经常改变单个页面的视图,那么我build议你把页面保存在内存中。 使用下面的代码来执行此操作

 mViewPager.setOffscreenPageLimit(#pages); to keep #pages in memory. I had 5 pages so my #pages was 4. 

如果要刷新viewpager幻灯片上的数据,请使用

 mViewPager.getAdapter().notifyDataSetChanged(); with getItemPosition() returning POSITION_NONE. 

并使用FragmentStatePagerAdapter。

我不认为有什么办法可以用你描述的同步方式延迟加载数据。 AsyncTask是要走的路,或者你可以直接使用线程。 我相信AsyncTask是专门为这种function而devise的。 直接使用线程更容易。 如果你需要实现的想法,看看: http : //geekjamboree.wordpress.com/2011/11/22/asynctask-call-web-services-in-android/

你看过Android的点火库吗? 根据示例应用程序,有一个组件“无尽列表”和一个httpcaching组件。

我没有尝试过自己,不知道这是否是一个解决scheme – 只是看到了例子…..