2014-10-16 83 views
0

我在Android上很新穎。 所以我有點困惑與碎片工作。將活動更改爲片段

我發現了一個非常大的tutorial.

所以我工作的代碼。但這是正常活動的佈局。

然後我試圖將其包含到導航抽屜中。
因此,只有當菜單項被選中時纔會顯示帶數據的列表視圖。

在片段View上有一個永不結束的加載對話框。

在調試時,我發現代碼加載數據並將其插入到feedItems中。
因此feedItems填寫正確。
現在在listAdapter.notifyDataSetChanged()之後沒有發生任何事情。

因此,這裏是我的代碼:

public class FragmentNews extends ListFragment { 

    private static final String TAG = FragmentNews.class.getSimpleName(); 
    private ListView listView; 
    private FeedListAdapter listAdapter; 
    private List<FeedItem> feedItems; 
    private String URL_FEED = "http://address.com"; 

    public FragmentNews(){} 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onActivityCreated(savedInstanceState); 

     loadDataForNews(); 
    } 

    private void loadDataForNews(){ 
     listView = this.getListView(); 

     feedItems = new ArrayList<FeedItem>(); 

     listAdapter = new FeedListAdapter(getActivity(), feedItems); 
     listView.setAdapter(listAdapter); 

     // We first check for cached request 
     Cache cache = AppController.getInstance().getRequestQueue().getCache(); 
     Entry entry = cache.get(URL_FEED); 
     if (entry != null) { 
      // fetch the data from cache 
      try { 
       String data = new String(entry.data, "UTF-8"); 
       try { 
        parseJsonFeed(new JSONObject(data)); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
      } 

     } else { 
      // making fresh volley request and getting json 
      JsonObjectRequest jsonReq = new JsonObjectRequest(Method.GET, 
        URL_FEED, null, new Response.Listener<JSONObject>() { 

         @Override 
         public void onResponse(JSONObject response) { 
          VolleyLog.d(TAG, "Response: " + response.toString()); 
          if (response != null) { 
           parseJsonFeed(response); 
          } 
         } 
        }, new Response.ErrorListener() { 

         @Override 
         public void onErrorResponse(VolleyError error) { 
          VolleyLog.d(TAG, "Error: " + error.getMessage()); 
         } 
        }); 

      // Adding request to volley request queue 
      AppController.getInstance().addToRequestQueue(jsonReq); 
     } 
    } 

    // List View Feed 
    private void parseJsonFeed(JSONObject response) { 
     try { 
      JSONArray feedArray = response.getJSONArray("feed"); 

      for (int i = 0; i < feedArray.length(); i++) { 
       JSONObject feedObj = (JSONObject) feedArray.get(i); 

       FeedItem item = new FeedItem(); 
       item.setId(feedObj.getInt("id")); 
       item.setName(feedObj.getString("name")); 

       // Image might be null sometimes 
       String image = feedObj.isNull("image") ? null : feedObj 
         .getString("image"); 
       item.setImge(image); 
       item.setStatus(feedObj.getString("status")); 
       item.setProfilePic(feedObj.getString("profilePic")); 
       item.setTimeStamp(feedObj.getString("timeStamp")); 

       // url might be null sometimes 
       String feedUrl = feedObj.isNull("url") ? null : feedObj 
         .getString("url"); 
       item.setUrl(feedUrl); 

       feedItems.add(item); 
      } 

      // notify data changes to list adapater 
      listAdapter.notifyDataSetChanged(); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

問題可以是listAdapter的充氣爲空?

感謝您的幫助!

回答

0

有時listAdapter.notifyDataSetChanged()無法正常工作。 嘗試刪除

listAdapter = new FeedListAdapter(getActivity(), feedItems); 
listView.setAdapter(listAdapter); 

從loadDataForNews()和 地方listAdapter.notifyDataSetChanged();

+0

它不工作,將...還有裝載對話框 – jublikon 2014-10-19 00:01:37