2014-10-16 2 views
0

나는 Android가 매우 새로운 편입니다. 그래서 조각으로 작업하는 것이 다소 혼란 스럽습니다.활동을 조각으로 변경하십시오.

나는 아주 큰 tutorial.

그래서 내가 작업 한 코드를 발견했다. 그러나 정상적인 활동의 배치입니다.

그런 다음 탐색 용 서랍에 넣으려고했습니다.
따라서 데이터가있는 목록보기는 메뉴 항목이 선택되었을 때만 표시됩니다.

조각보기에는 끝나는 로딩 대화 상자가 있습니다.

디버깅하는 동안 코드가 여전히 데이터를로드하고이를 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의 인플레이터가 null이라고 할 수 있습니까?

도움 주셔서 감사합니다.

답변

0

때때로 listAdapter.notifyDataSetChanged()이 제대로 작동하지 않습니다. loadDataForNews에서

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

(제거) 및 listAdapter.notifyDataSetChanged();

그것은 작동하지 않습니다
+0

의 장소에 추가하십시오 ... 여전히로드 대화 상자가 – jublikon

관련 문제