2013-06-20 56 views
0

在我的應用程序中,遇到與herehere相同的錯誤,但建議的清理Eclipse項目的解決方案對我無效。具體來說,我有一個自定義ListView適配器試圖從其佈局文件中加載兩個TextView,第一個TextView沒有問題,但第二個拋出ResourceNotFound異常並使應用程序崩潰。BaseAdapter ResourceNotFound異常

佈局文件

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/RelativeLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <TextView 
     android:id="@+id/roomNameText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginLeft="16dp" 
     android:text="Room name" 
     android:textAppearance="?android:attr/textAppearanceLarge" /> 

    <TextView 
     android:id="@+id/roomNumText" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignLeft="@+id/roomNameText" 
     android:layout_below="@+id/roomNameText" 
     android:text="Room number" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

</RelativeLayout> 

適配器

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     m = new ViewHolder(); 
     convertView = mInflater.inflate(R.layout.room_row, null); 
     convertView.setTag(m); 
    } else { 
     m = (ViewHolder) convertView.getTag(); 
    } 

    m.name = (TextView) convertView.findViewById(R.id.roomNameText); 
    m.name.setText(rooms.get(position).getName()); 
    m.roomNumber = (TextView) convertView.findViewById(R.id.roomNumText); 
    m.roomNumber.setText(rooms.get(position).getRoomNumber()); 
    return convertView; 

} 

我也曾嘗試編輯R.java只是爲了迫使Eclipse來重新生成該文件,但也不能正常工作。真的不知道還有什麼要嘗試,因爲我有另一個基本相同的適配器,但對於完美工作的不同數據。另外,ViewHolder是一個靜態類,它只是任何有人想知道的任何視圖的容器類(必須根據編碼風格使用它)。

回答

4

變化

m.roomNumber.setText(rooms.get(position).getRoomNumber()); 

m.roomNumber.setText(String.valueOf(rooms.get(position).getRoomNumber())); 
在你的代碼

您使用的是setText(int stringId)其查找內部R.string以檢索該參數的StringID。此外,我會改變你的getView這樣:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
if (convertView == null) { 
    m = new ViewHolder(); 
    convertView = mInflater.inflate(R.layout.room_row, null); 
    m.name = (TextView) convertView.findViewById(R.id.roomNameText); 
    m.roomNumber = (TextView) convertView.findViewById(R.id.roomNumText); 
    convertView.setTag(m); 
} else { 
    m = (ViewHolder) convertView.getTag(); 
} 


m.name.setText(rooms.get(position).getName()); 
m.roomNumber.setText(String.valueOf(rooms.get(position).getRoomNumber())); 
return convertView; 

} 
+0

這是一個漂亮的區別:) – gunar

+0

嗯非常有趣的差異。甚至沒有想到'getRoomNumber()'的int返回導致它搜索資源。謝謝:) – jhorvat

+0

不客氣 – Blackbelt