在数组列表中动态显示数据



在我的应用程序中,我试图显示ArrayList中的数据。用户可以转到我的ArrayList中的下一个和上一个元素,并且会显示该位置的数据。我的问题是,我不知道如何显示来自Parse.com的数据。例如,我应该在UI线程上检查什么条件来检查它是否加载到ArrayList中,以便显示它?我假设当第一个元素没有加载时,我只会显示一个进度条。

此外,当检索到所有行并可以显示时,如何通知UI线程?我会设置一个全局变量吗?

2个查询可能适用于Parse.com:

// This is used to get a list of objects from the query
ParseQuery<ParseObject> query = ParseQuery.getQuery("GameScore");
query.whereEqualTo("playerName", "Dan Stemkoski");
query.findInBackground(new FindCallback<ParseObject>() {
public void done(List<ParseObject> scoreList, ParseException e) {
if (e == null) {
Log.d("score", "Retrieved " + scoreList.size() + " scores");
} else {
Log.d("score", "Error: " + e.getMessage());
}
}
});
// This one is used to get a single object as opposed to a list of objects
ParseQuery<ParseObject> query = ParseQuery.getQuery("GameScore");
query.getInBackground("xWMyZ4YEGZ", new GetCallback<ParseObject>() {
public void done(ParseObject object, ParseException e) {
if (e == null) {
// Here I would add this to the list
// object will be your game score
} else {
// something went wrong
}
}
});

现在,我可能想使用获取List<ParseObject>的查询,因为我从整个列中获取数据,而不仅仅是单个对象。但是,如果是这样的话,那么不可能知道每个单独的元素是什么时候完成的吗?回调只会让您知道所有列表何时完成加载。我想第二个可能是可能的,因为我知道每个单独的一个何时完成,但我怎么知道我还没有从该列中查询到哪一行。解决这个问题的一种方法是做一个选择条件,但这似乎与计算有关。我做过类似的事情,但只针对ListViewsCursors

我最初的想法是只显示一个加载对话框进度条,但这与阻塞UI线程没有什么不同。

https://parse.com/docs/android_guide#queries

实际上,使用进度对话框不同于阻塞UI线程:用户可以关闭对话框(你必须在代码中正确处理它。)阻塞UI线程意味着不处理任何类型的输入(包括Android生命周期回调),并有机会进行ANR。

如果您将ArrayList封装在Adapter中,并且UI组件(即ListView)是从该适配器馈送的,那么您可以自由地(根据需要进行保护)向ArrayList添加数据,只需通过调用BaseAdapter.notifyDataSetChanged()方法通知视图更改即可。这将导致UI更新其数据显示。将其与Loader或其他机制结合起来,在后台进行数据传输,它将实现您想要的。

最新更新