2013-02-23 83 views
0

我正在構建我自己的ListView基於this教程。創建自定義適配器類,以避免自定義列表視圖

此行: MessageDetails msg = _data.get(position); 在他的代碼給我一個問題。我顯然遇到了這一行的類型錯誤。我不明白他的代碼是如何工作的。我應該做些什麼不同的事情,以便我能像他那樣工作。

編輯

我知道的一個事實,即與該行的問題是,它試圖把兩種不同類型的共同MessageDetailsArrayList<String>。他的教程並沒有給我一個很好的方式,因爲我得到的錯誤,他顯然沒有。

我的適配器類

public class MenuItemAdapter extends BaseAdapter { 
    private ArrayList<String> _data; 
    Context _c; 

    MenuItemAdapter(ArrayList<String> data, Context c){ 
     _data = data; 
     _c = c; 
    } 
    public int getCount() { 
     return _data.size(); 
    } 
    public Object getItem(int position) { 
     return _data.get(position); 
    } 
    public long getItemId(int position) { 
     return position; 
    } 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     if (v == null) { 
      LayoutInflater vi = (LayoutInflater) _c.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      v = vi.inflate(R.layout.menuitemrow, null); 
     } 
     ImageView image = (ImageView) v.findViewById(R.id.MIR_itemImage); 
     TextView itemName = (TextView)v.findViewById(R.id.MIR_itemImage); 
     TextView itemDescription = (TextView)v.findViewById(R.id.MIR_itemDescription); 
     TextView itemPrice = (TextView)v.findViewById(R.id.MIR_itemPrice); 
     TextView itemOther = (TextView)v.findViewById(R.id.MIR_itemOther); 

     // Create instance of MenuItemDetail and then assign 
     MenuItemDetail mid = _data.get(position); 
     image.setImageResource(mid.icon); 
     itemName.setText(mid.itemName); 
     itemDescription.setText(mid.itemDescription); 
     itemPrice.setText(mid.itemPrice); 
     itemOther.setText(mid.itemOther); 
     return v; 
    } 

} 

,這是我MenuItemDetail類,這是非常相似,他只是我的領域代替。

public class MenuItemDetail { 

    int icon; 
    String itemName; 
    String itemDescription; 
    String itemPrice; 
    String itemOther; 



    public int getIcon() { 
     return icon; 
    } 
    public void setIcon(int icon) { 
     this.icon = icon; 
    } 
    public String getItemName() { 
     return itemName; 
    } 
    public void setItemName(String itemName) { 
     this.itemName = itemName; 
    } 
    public String getItemDescription() { 
     return itemDescription; 
    } 
    public void setItemDescription(String itemDescription) { 
     this.itemDescription = itemDescription; 
    } 
    public String getItemPrice() { 
     return itemPrice; 
    } 
    public void setItemPrice(String itemPrice) { 
     this.itemPrice = itemPrice; 
    } 
    public String getItemOther() { 
     return itemOther; 
    } 
    public void setItemOther(String itemOther) { 
     this.itemOther = itemOther; 
    } 


} 

任何幫助和解釋將不勝感激。

我還必須修復ArrayList問題以及它需要的ArrayList<String>。不知道這種變化是哪裏出了問題。

回答

0

該示例的代碼存在問題。這是無法完成的。解決方法是確保您傳遞的是您正在使用的類型的ArrayList<YourType>。但是,這會導致嘗試將其傳遞到捆綁包時出現問題,因爲只有ArrayLists<String>可以作爲捆綁包中的額外傳遞。所以最好,我的解決方案是製作一個轉換器方法,將對象轉換爲ArrayyList<String>,然後使用另一種構造方法從ArrayList<String>創建該類型。這就需要創建一個異常類,以便在從ArrayList<String>ArrayList<YourType>的轉換中發現錯誤,除非粗略地說明您已經使系統「防錯」,這是我非常懷疑的。

我試圖避開這條路線,但它是唯一可行的解​​決方案。

2

您將_data聲明爲字符串列表(ArrayList<String>),也許您打算使用ListItemItemItemDetails?既然你不能將一個字符串轉換成一個MenuItemDetail對象。這些類是無關的。

private ArrayList<MenuItemDetail> _data; 
Context _c; 

MenuItemAdapter(ArrayList<MenuItemDetail> data, Context c){ 
    _data = data; 
    _c = c; 
} 
+0

你讓我困惑了一會兒。你在混合你的類'MenuItemDetail'和教程類'MessageDetail',仔細檢查這不是你的問題。否則,我很困惑你如何期望將一個簡單的字符串轉換爲你的MenuItemDetail對象。正如我前面所說,沒有理由不能使用JSON來創建MenuItemDetails列表。從長遠來看,這是你最好的方法。 – Sam 2013-02-23 22:02:26

+0

他們不同,只是因爲我是自己做的。我會給這個想法一些牽引力 – Mark 2013-02-24 02:56:09