2013-09-25 82 views
0

我有一個三個片段的主要活動。在第一個片段是一個列表視圖。我填充它的片段的onCreateView方法是這樣的:適配器沒有被刷新

private ArrayList<MobileNETDistinctChatInfo> m_parts = new ArrayList<MobileNETDistinctChatInfo>(); 
public MobileNETDistinctChatInfoAdapter m_adapter; 
public ListView list; 
public String logged_user; 

onCreateView(){ 
    LinearLayout view = (LinearLayout) inflater.inflate(R.layout.tab1, container, false); 
    list = (ListView)view.findViewById(R.id.chats_list) 

    m_parts = db.MESSAGES_getAllDistinctChatInfo(logged_user); 

    // adapter extends the ArrayAdapter 
    m_adapter = new MobileNETDistinctChatInfoAdapter(getActivity(), R.layout.chatlist_list_item, m_parts); 

    list.setAdapter(m_adapter); 

    return view; 

} 

我想刷新列表視圖中片段1中的onResume()方法,但我不能得到它的工作。我想這兩種方法(如果我用第一種方法,什麼都不會發生。如果我用的是第二,應用程序崩潰,返回一個NullPointerException異常。):

# 1 
public void onResume() { 
    super.onResume(); 

    getActivity().runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      m_adapter.notifyDataSetChanged(); 
     } 
    } 
} 

# 2 
public void onResume() { 
    super.onResume(); 

    getActivity().runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 

      m_parts.clear(); 
      m_parts = db.MESSAGES_getAllDistinctChatInfo(logged_user); 

      ListView list = (ListView) getActivity().findViewById(R.id.chats_list); 
      MobileNETDistinctChatInfoAdapter caa = (MobileNETDistinctChatInfoAdapter) list.getAdapter(); 
      caa.clear(); 

      for(MobileNETDistinctChatInfo el : m_parts){ 
       caa.add(el); 
      } 

      list.setAdapter(caa); 
     } 
    } 
} 

我已經印刷m_parts中的onResume規模和m_adapter ()和似乎適配器沒有被刷新,但m_parts是。有人知道爲什麼,或者我該如何解決這個問題?

回答

0

您正在一個單獨的線程中運行m_adapter.notifyDataSetChanged(),該線程在實際修改或更新列表之前負責執行刷新列表。

如果您設置了代碼,那麼您可以看到它工作正常,因爲線程有足夠的時間執行。

+0

我也試過m_adapter.notifyDataSetChanged()沒有runOnUiThread方法,結果是一樣的。 – TheAptKid