Android 使用数组适配器创建无限列表
Android Creating an Infinate list using array adapter
美好的一天,
我要实现的目标如下:
创建无限滚动列表我在 GITHUB 上发现了以下内容,我认为 Whosebug 用户强烈推荐它。
https://github.com/shontauro/android-pulltorefresh-and-loadmore
背景是这样的:
我的数据库中有一个 posts 的数据库(超过 2000 个活动 posts)我想在列表视图中显示 20 posts 具有以下字段
PID
名称
标题
然后当用户到达列表末尾时,它应该再加载 20 posts。
我知道我需要以某种方式使用 OnNotifyDataSetChanged();但真的不知道如何实现它。
我找到的所有教程都使用简单的数组适配器并且只能接受单个项目:(
该列表还应该有一个 onclick 侦听器,它将检索 post 并将其设置为新的 activity。
我可以使用 JSON 从我的服务器检索 posts,但是追加已经显示的列表让我很困惑。
public class DownloadJSON extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
// Retrieve JSON Objects from the given URL address
jsonobject = JSONfunctions.getJSONfromURL("http://www.example.com/posts.php?last_id=");
try {
// Locate the array name in JSON
jsonarray = jsonobject.getJSONArray("posts");
for (int i = 0; i < jsonarray.length(); i++) {
jsonobject = jsonarray.getJSONObject(i);
// Retrive JSON Objects
pid = jsonobject.getString("pid");
name = jsonobject.getString("name");
title = jsonobject.getString("title");
}
} catch (JSONException e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return null;
}
}
如果有人能给我指出正确的方向,我真的很喜欢它
谢谢
肯尼
因为您将数据本地存储在数据库中,所以最好使用 CursorAdapter 而不是 ArrayAdapter。 CursorAdapter 不会同时加载 2000 个项目,因此在内存使用方面更好。它还将为您管理大量与加载和更新数据相关的工作。
您必须执行以下操作:
- 使用 CursorAdapter 为当前数据创建列表
- 一旦到达加载数据的末尾,请调用服务器
- 更新当前光标。
涉及的代码很多,无法作为答案发布。以下资源应该有助于完成它:
如何使用 CursorAdapter:http://www.vogella.com/tutorials/AndroidSQLite/article.html#sqliteoverview_listviews
在数据库中加载更多数据后如何交换光标:
Android SimpleCursorAdapter doesn't update when database changes
美好的一天,
我要实现的目标如下:
创建无限滚动列表我在 GITHUB 上发现了以下内容,我认为 Whosebug 用户强烈推荐它。
https://github.com/shontauro/android-pulltorefresh-and-loadmore
背景是这样的:
我的数据库中有一个 posts 的数据库(超过 2000 个活动 posts)我想在列表视图中显示 20 posts 具有以下字段
PID 名称 标题
然后当用户到达列表末尾时,它应该再加载 20 posts。
我知道我需要以某种方式使用 OnNotifyDataSetChanged();但真的不知道如何实现它。
我找到的所有教程都使用简单的数组适配器并且只能接受单个项目:(
该列表还应该有一个 onclick 侦听器,它将检索 post 并将其设置为新的 activity。
我可以使用 JSON 从我的服务器检索 posts,但是追加已经显示的列表让我很困惑。
public class DownloadJSON extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
// Retrieve JSON Objects from the given URL address
jsonobject = JSONfunctions.getJSONfromURL("http://www.example.com/posts.php?last_id=");
try {
// Locate the array name in JSON
jsonarray = jsonobject.getJSONArray("posts");
for (int i = 0; i < jsonarray.length(); i++) {
jsonobject = jsonarray.getJSONObject(i);
// Retrive JSON Objects
pid = jsonobject.getString("pid");
name = jsonobject.getString("name");
title = jsonobject.getString("title");
}
} catch (JSONException e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return null;
}
}
如果有人能给我指出正确的方向,我真的很喜欢它
谢谢
肯尼
因为您将数据本地存储在数据库中,所以最好使用 CursorAdapter 而不是 ArrayAdapter。 CursorAdapter 不会同时加载 2000 个项目,因此在内存使用方面更好。它还将为您管理大量与加载和更新数据相关的工作。
您必须执行以下操作: - 使用 CursorAdapter 为当前数据创建列表 - 一旦到达加载数据的末尾,请调用服务器 - 更新当前光标。
涉及的代码很多,无法作为答案发布。以下资源应该有助于完成它:
如何使用 CursorAdapter:http://www.vogella.com/tutorials/AndroidSQLite/article.html#sqliteoverview_listviews
在数据库中加载更多数据后如何交换光标: Android SimpleCursorAdapter doesn't update when database changes