使用自定义适配器在ListFragment中填充ParseObject

阿巴斯·达伍德(Abbas Dawood)

我正在尝试使用自定义ArrayAdapter和自定义数据对象填充ListFragment。持久远程存储是一个Parse数据集,该数据集映射到我创建的自定义Data对象。问题是我无法在馈入arrayadapter的数组列表中填充来自Parse的查询响应。当我对虚拟数据执行此操作时,它可以正常工作。当我使用列表时,它不会。

希望对此有所帮助。

片段:

private List<DataItem> itemsList; //Initialize a list of Data Items type

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    itemsList = new ArrayList<DataItem>();

    //Parse Initialised here

    ParseQuery<ParseObject> query = ParseQuery.getQuery("object");
    query.findInBackground(new FindCallback<ParseObject>() {
        @Override
        public void done(List<ParseObject> objectList, ParseException e) {
            if(e == null){
                addItem(objectList);
            } else {
                Log.d("List Activity",e.getMessage());
            }
        }
    });

    //Static Data Population - This works fine
    DataItem item1 = new DataItem();
    item.setName("SampleName");
    item.setPhone("12345678");
    item.setAddress("Mumbai");

    //Set Adapter
    ListAdapter adapter = new ListAdapter(getActivity(), itemsList);
    setListAdapter(adapter);
    adapter.notifyDataSetChanged();
}

public void addItem(List<ParseObject> objectList){
    for(int i =0; i< objectList.size(); i++){
        DataItem item = new DataItem();
        item.setName(objectList.get(i).getString("name").toString());
        item.setPhone(objectList.get(i).getString("phone").toString());
        item.setAddress(objectList.get(i).getString("address").toString());
        itemsList.add(item); //This is not working
    }

}
罗伯特·罗恩特里

您需要在'done'和'addItem'之间为JSON对象提供平面处理程序...

原因是查询返回的平面字符串包含JsonRoot对象->包含“结果”数组,在调用从Json.Results.Array中的条目创建Map对象的方法之前,必须明确解开“结果”数组。 ..

添加一些获取平坦的Json对象并对其进行迭代的结果...

public  void getList(JsonNode root){
        String _mimeTyp;
        ArrayNode array = (ArrayNode) root.path("results");
        for(JsonNode node :  array){
            HashMap<String, String> map = new HashMap<String, String>();
            map.put("id", node.path("objectId").getTextValue());
            map.put("msg", node.path("msg").getTextValue()); 
   ...
            $myArray<HashMap>.add(map);

然后将最后的杂草喂给lazyAdapter。

list=(ListView)findViewById(R.id.list);
adapter=new LazyAdapter(myact, $myArray, new AQuery(myact));
list.setAdapter(adapter);  

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章