0

我一直在學習Android Loaders並試圖用AsyncTaskLoader實現一個。在方向變化LoaderManager調用onLoadFinished但沒有設置列表

我一直很成功,從而使這更討厭:P

我onLoadFinished功能如下:

@Override 
public void onLoadFinished(Loader<JSONArray> arg0, JSONArray data) { 
    // TODO Auto-generated method stub 
     setProgressBarIndeterminateVisibility(false); 
     mLoadedData = data; 
    //Log.d("here","dosomething"); 
    //Toast.makeText(getApplicationContext(), "msg msg", Toast.LENGTH_LONG).show(); 

    //Log.d("json",mLoadedData.toString()); 

    Fragment f = getSupportFragmentManager().findFragmentByTag("pub_list"); 
    ((BP_Fragment) f).set_result(mLoadedData); 


} 

在我的片段的set_result功能如下:

public void set_result(JSONArray data) { 
    // TODO Auto-generated method stub 
    //Toast.makeText(getSherlockActivity(), "set result is called..", Toast.LENGTH_SHORT).show(); 


    Log.d("pubs",data.toString()); 
    for (int i = 0; i <data.length(); i++){ 
     Log.d("string","here"); 
     JSONObject c; 
     try { 
      c = data.getJSONObject(i); 


     String id = c.getString("pid"); 
     String name = c.getString("name"); 
     String town = c.getString("town"); 
     String county = c.getString("county"); 
     //Double score=c.getDouble(criteria); 
     //Log.d("score",score); 
     //HashMap<String, String> map = new HashMap<String, String>(); 


     pubs.add(new PubListDetails(id,name,town,county,1.0,"pub")); 
     //map.put(TAG_PID, id); 
     //map.put(TAG_NAME, name); 

     //productsList.add(map); 

     } catch (JSONException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 



    PubListAdapter adapter = new PubListAdapter(getSherlockActivity(), pubs); 
    // Toast.makeText(getSherlockActivity(), "This is called", Toast.LENGTH_SHORT).show(); 


     setListAdapter(adapter); 

} 

我使用LoaderManager調試器來檢查加載程序正在保留..它是。我已經使用控制檯日誌來輸出我的數據從set_result函數內 - 數據是在那裏每個方向的變化.. IE的一切都被調用,並且一切都按照建議傳遞YET set_adapter只在第一次設置數據到列表,當它被保留的加載程序調用時調用no。

爲什麼? :P我迷失了方向。

THanks

+0

你試過在適配器上調用'notifyDataSetChanged()'嗎? –

+0

數據集沒有改變它只是沒有完成在旋轉點加載。旋轉後,我看到加載完成,但setListAdapter不起作用。 –

回答

0

所以我解決了這個問題。

在我的加載器Activity中,我在onCreate中創建了一個片段,其中包含我的列表和我的set_result函數。

儘管當我重新創建我的活動方向更改時,加載程序被成功保留,但它使用相同的標記創建另一個片段,而不是使用保留的標記。

因此,當我打電話給我的set_result函數時,我認爲它找到了我的初始片段並在其上設置了列表。

我不確定100%碎片是如何在您創建兩個具有相同標記的情況下工作的 - 我只能假定重新創建的版本位於我的最初版本之上,因此隱藏了它。

相關問題