0

我想填充ListFragment,使用自定義ArrayAdapter和自定義數據對象。持久遠程存儲是映射到我創建的自定義數據對象的Parse數據集。問題是我無法在饋送給arrayadapter的數組列表中填充來自Parse的查詢響應。當我使用虛擬數據執行此操作時,它工作正常。當我處理列表時,它不會。使用自定義適配器填充ListFragment中的ParseObject

希望對此有幫助。

摘錄:

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 
    } 

} 

回答

0

您需要爲您之間「完成」和「的addItem」 JSON對象扁平處理器...

原因是該查詢返回包含JsonRoot對象的扁帶 - >包含'results'數組,你必須在調用一個將從Json.Results.Array中的條目創建一個Map對象的方法之前明確展開....「」 ,Json對象並迭代其中的results.array .. 。

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); 

,去年arrary再喂到lazyAdapter ....

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

感謝羅伯特,而我嘗試使用該適配器的結果所需,Parsequeryadapter做同樣的伎倆。現在我有一個自我實現的parsequeryadapter使用你的邏輯:D謝謝 – 2015-01-24 01:44:37

相關問題