android在视图寻呼机中异步加载数据

Han*_*nry 9 android android-asynctask android-viewpager

我需要一个查看分页器实现的解决方案.首先,我在单页中从数据库加载大量数据,因此有时在刷卡期间它会减慢刷卡频率(需要在页面上多次刷卡),因为它在后台正在执行提取任务.我没有使用异步任务返回视图.是否有任何方法来延迟加载页面只允许用户在刷卡上转到其他页面但数据是延迟加载的.

我的代码示例如下;

 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;
}
Run Code Online (Sandbox Code Playgroud)

我在create方法中调用它.

pager=(ViewPager) findViewById(R.id.pagerAdapter);
pager.setAdapter(new SimplePager(MyPager.this));
pager.setCurrentItem(364);
Run Code Online (Sandbox Code Playgroud)

有什么解决方案吗?

gal*_*lex 17

我建议使用Fragments(而不是直接使用视图).

您需要在片段上使用接口告诉它们何时显示:

public interface IShowedFragment {

    public void onShowedFragment();
}
Run Code Online (Sandbox Code Playgroud)

使所有片段实现该接口,并在该方法中调用您的loaders/asyncTasks/background任务.

然后在ViewPager上放置一个onPageChangeListener,当您检测到用户更改了页面时,请调用片段上的interface方法.您可以选择使用此侦听器,其中一种方法可以等待viewPager停止滑动以触发您的接口调用.

为了能够获得正确的片段来进行此调用,请从yourFragmentApadter.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();
      }
  }
  (...)
Run Code Online (Sandbox Code Playgroud)

就像那样,您可以使用空视图准备片段,当您在其中滑动时,您开始加载数据.

  • 碎片会让你的生活更轻松.如果您在片段中实现它们,那么您可以随时加载数据(异步),然后在Fragment的createView()上显示它们.http://developer.android.com/reference/android/support/v13/app/FragmentStatePagerAdapter.html (3认同)

Cod*_*oet 0

我认为没有任何方法可以以您描述的同步方式延迟加载数据。AsyncTask 是可行的方法,或者您可以直接使用线程。我相信 AsyncTask 是专门为这种功能而设计的。比直接使用线程更方便。如果您需要有关实现的想法,请查看: http://geekjamboree.wordpress.com/2011/11/22/asynctask-call-web-services-in-android/