带有600页书的ListFragment

时间:2014-06-24 19:22:26

标签: android

我已经实现了一个执行以下操作的ListFragment:

1-将图像文件(页面)加载到列表中<页面>。 (文件来自sdcard app-private目录)

2-创建ListAdapter并传递List<页面>反对它。

3- setListAdapter to ListFragment。

public class QReadingFragment extends ListFragment {
    private Context context;

    public QReadingFragment() {
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        context = getActivity();
        new QLoadPagesTask().execute(context.getExternalFilesDir(null));
    }

    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
    }

    private class QLoadPagesTask extends AsyncTask<File, String, List<? extends QPage>> {

        @Override
        protected List<? extends QPage> doInBackground(File... files) {
            return QPageContract.preparePages(files[0]);
        }

        @Override
        protected void onPostExecute(List<? extends QPage> pages) {
            setListAdapter(new QReadingAdapter(context, pages));
        }
    }
}

QReadingAdapter实现了一个ListAdapter,它的getView返回了imageView对象。

我的问题是加载所有600页(图片)会导致我的应用关闭:

  

不幸的是,APP已经停止了。

我尝试过只加载10个页面,应用程序运行没有任何问题。

所以我决定使用AsyncTask(使用largeHeap =&#34; true&#34;)一次加载所有600个iages,我仍然遇到同样的问题。

更新

现在我的ListFragment加载了前10页,当用户向下滚动ListFragment加载下一页时,但当我向下滚动到600页时,由于内存限制,android关闭了应用程序。

我现在要做的是将以下页面加载到ListFragment中:

  • First Visible Page
  • 在第一个可见页面&#34;
  • 之前的两页
  • &#34;第一个可见页面后的两页&#34;

必须为listFragment上的所有其他项目分配存根图像。

1 个答案:

答案 0 :(得分:2)

一种方法是使用适配器,最多可容纳10个项目。并检查onScroll(AbsListView, int, int,int) onScrollListener中的最后一个可见项目。然后,当您到达目的地时,请在适配器中加载接下来的10个项目并致电adapter.notifyDataSetChanged()