我的Parse数据库中有一个类如下:
我不想在我的活动中的ListView中显示它,以便它显示当前设备的每个Date和Reps值。对于设备yhmrKgokfS,它看起来像这样:
-Jul 05,15
2/3-Jul 05,15
5/3/2/4/2-Jul 05,15
4/5/5/6/3
以下是我用来实现此目的的代码:
private ListView displayList;
List<ParseObject> store = new ArrayList<ParseObject>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
displayList = (ListView)findViewById(R.id.displayList);
ParseQuery<ParseObject> query = ParseQuery.getQuery("Workout");
query.whereEqualTo("Device", ParseInstallation.getCurrentInstallation());
query.setLimit(100);
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> dataList, ParseException e) {
// logic here
store = dataList;
}
});
final ArrayAdapter<ParseObject> arrayAdapter = new ArrayAdapter<ParseObject>(
this,
android.R.layout.simple_expandable_list_item_1,
store
);
displayList.setAdapter(arrayAdapter);
}
然而,我的清单最终是空的。将我的Parse数据库中的项目显示到ListView中的正确方法是什么?我得到了它的要点,但无法正确执行它,有人可以编写一些代码来帮助我获得我需要做的事情吗?
答案 0 :(得分:0)
您正在将store
传递到您的适配器,但随后您在done
的{{1}}中更改了它的引用,该引用是异步运行的,因此您的适配器只保留在空列表中。您应该修改findInBackground
的同一个实例。快速解决方法是在store
done
然后拨打store.addAll(dataList)
此外,默认适配器仅使用每个对象的adapter.notifyDataSetChanged();
,因此如果要查看任何有用的内容,则需要创建自定义适配器。
答案 1 :(得分:0)
我不认为默认ArrayAdapter
知道如何解释ArrayList<ParseObject>
对象,您需要创建自己的适配器或使用带有List<String>
对象的默认适配器。 / p>
同样在done(....)
方法中,您应该将新项目添加到列表中,而不是再次初始化store
对象。
@Override
public void done(List<ParseObject> dataList, ParseException e) {
store.addAll(dateList);
context.runOnUiThread(new Runnable() {
@Override
public void run() {
arrayAdapter.notifyDataSetChanged();
}
});
}