2013-05-14 50 views
1

我想在同一ListView顯示不同類型的對象不同的對象,但我不知道如何通過getItem(position)顯示在同一ListAdapter

區分這些對象的ListView顯示器Messages列表,從而可以是A Chat,無論是Notification,並且項目ChatNotification有不同的佈局。

這是適配器:

public class MailboxAdapter extends BaseAdapter { 

    private ArrayList<Messages> m_alMessages = null; 

    private Messages getItem(int position) { 

     return m_alMessages.get(position) 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     if (m_alMessages != null) { 
      if (getItem(position).isChat()) { 
       final Chat cChatItem = getItem(position); 
       if (convertView == null) { 
        //Cat logic 
        // ... 
       } 
      } else { 
       final Notification nNotifItem = getItem(position); 

       if (convertView == null) { 
        //Notification logic 
        // ... 
       } 

      } 
     } 
    } 

郵件類(最小)

public class Message { 
     private long m_lId = 0L; 
     private boolean m_bIsChat = false; 

     public boolean isChat() { return m_bIsChat; } 

} 

NotificationChat類:

public class Notification extends Message { ... } 

public class Cat extends Message { ... } 

我檢索聊天與列表開始活動時來自web服務的通知列表,所以我不得不將它們添加到它們各自的訂單(日期)中的消息的新列表,然後實例化具有此列表的

這是一個很好的做法嗎?

+0

看看這是否有助於你,http://stackoverflow.com/questions/8927315/two-launcher-activities – 2013-05-14 10:26:44

+0

對不起,但這與問題無關 – 2013-05-14 10:38:05

回答

3

只需添加一個布爾標誌,對類對象和適配器,檢查該標誌,如果它使用一種佈局,聊天,另外如果它被標記爲通知。與

沒問題,有一個教程here這實際上涵蓋了或多或少的你正在嘗試用不同的視圖佈局做一個ListView

在適配器中創建兩個viewholders,一個是聊天,一個通知。然後,在getView(),讓您創建的視圖,檢查布爾標記的對象,實例化正確的支架和膨脹基於標記的看法,然後設置視圖元素,你會如果有隻是一個類和ListView將顯示您設置該元素的視圖。

+0

如果在對象類(isChat)中有一個布爾值,適配器中的布爾值是什麼? – 2013-05-14 10:39:16

+0

如果你已經有一個標誌,那麼是的,你可以檢查在getElement方法,你可以得到的觀點佔位符對象被填充,檢查標誌,並相應地膨脹的看法。 – o0rebelious0o 2013-05-14 10:42:24

1

正如o0rebelious0o說,使用標誌或ID在你的對象。然後,在適配器中使用getItemViewTypegetViewTypeCount來區分您的項目類型。所以,在getView中,您只會收到兼容的convertView。