如何在Android Activity中通过Parse将关联数据展示到ListView?
解决Android中Parse关联数据展示到ListView的问题
我看你已经能通过Parse Query获取到关联的评论数据了,但目前的问题是没有把获取到的真实数据更新到ListView的数据源里,所以调用adapter.notifyDataSetChanged()也不会有效果。下面是具体的修改方案:
核心问题分析
你的代码里初始化了测试用的list数据,但在Parse Query成功拿到commentList后,并没有把这些真实数据替换掉原来的测试数据,适配器的数据源还是旧的,自然不会更新UI。
修改后的完整代码
final ListView listview = (ListView) findViewById(R.id.lvComentario); final ArrayList<String> list = new ArrayList<String>(); // 先初始化适配器,这里可以先留空或者放默认提示文本 final StableArrayAdapter adapter = new StableArrayAdapter(this, android.R.layout.simple_list_item_1, list); listview.setAdapter(adapter); comentario = (EditText) findViewById(R.id.text_comentario); botaoSalvar = (Button) findViewById(R.id.button_salvar); Intent i = getIntent(); obID = i.getStringExtra("imagem"); ParseQuery<ParseObject> query = ParseQuery.getQuery("comentario"); query.whereEqualTo("parentesco", obID); query.findInBackground(new FindCallback<ParseObject>() { public void done(List<ParseObject> commentList, ParseException e) { if (e == null) { // 清空旧的测试数据 list.clear(); // 遍历Parse返回的评论列表,提取需要展示的内容 for (ParseObject comment : commentList) { // 注意:这里的"comentario_conteudo"要替换成你Parse表中存储评论内容的真实字段名 String commentContent = comment.getString("comentario_conteudo"); if (commentContent != null) { list.add(commentContent); } } Log.d("score", "成功获取到" + commentList.size() + "条评论"); } else { Log.w("Parse query", "获取评论失败:" + e.getMessage()); } // 通知适配器数据已更新,刷新ListView adapter.notifyDataSetChanged(); } });
关键修改点说明
- 清空旧数据源:在添加新数据前调用
list.clear(),避免测试数据和真实数据混在一起 - 提取Parse数据:遍历
commentList,从每个ParseObject中取出你需要展示的字段值(一定要替换成你自己的字段名,比如如果你的评论内容存在"texto"字段,就用comment.getString("texto")) - 通知适配器更新:在处理完数据后调用
adapter.notifyDataSetChanged(),让ListView重新加载数据
另外,记得确保你的StableArrayAdapter是正确继承自ArrayAdapter的,这样它才能正确绑定ArrayList<String>作为数据源。
内容的提问来源于stack exchange,提问作者Edson Luiz Nascimento
相关产品推荐
相关产品推荐

