我正在尝试从SQLite数据库输出一个列表,并且遇到了这个异常:
android.content.res.Resources $ NotFoundException:来自xml类型布局资源ID的文件#0x102000a
在检查了类似的问题后,我确保我的ListView被定义为@ id / android:list但仍然得到相同的异常。 ListActivity类中的onCreate方法完成时会发生此问题。 getAllDiaryEntries()方法确实从db获取数据,但是一旦它返回到ListActivity类并且onCreate完成,我得到了异常。这是代码的相关部分。
这是ListActivity类:
public class DiarySchedule extends ListActivity
{
private DiaryDataSource datasource;
private static final String TAG = "DiaryDbAdapter";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.diary_schedule);
datasource = new DiaryDataSource(this);
datasource.open();
List<DiaryEntry> values = datasource.getAllDiaryEntries();
ArrayAdapter<DiaryEntry> adapter = new ArrayAdapter<DiaryEntry>(this,
android.R.id.list, values);
setListAdapter(adapter);
}
接下来我们有getAllDiaryEntries()方法:
public List<DiaryEntry> getAllDiaryEntries()
{
List<DiaryEntry> diaryEntries = new ArrayList<DiaryEntry>();
Cursor cursor = database.query(DiaryDbAdapter.DIARY_TABLE,
allColumns, null, null, null, null, null);
cursor.moveToFirst();
while (!cursor.isAfterLast())
{
DiaryEntry diaryEntry = cursorToDiaryEntry(cursor);
diaryEntries.add(diaryEntry);
cursor.moveToNext();
}
// Make sure to close the cursor
cursor.close();
return diaryEntries;
}
布局(未设置样式或其他任何内容):
<ListView
android:id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
我还是Android的新手,所以可能错过了一些简单的东西,但提前感谢任何帮助。
已编辑 - 这是cursortoDiaryEntry方法
私有DiaryEntry cursorToDiaryEntry(光标游标) { DiaryEntry diaryEntry = new DiaryEntry(); diaryEntry.setId(cursor.getLong(0)); diaryEntry.setTitle(cursor.getString(1)); diaryEntry.setDate(cursor.getString(2)); diaryEntry.setDescription(cursor.getString(3)); return diaryEntry; }
答案 0 :(得分:2)
ArrayAdapter的构造函数(您正在使用的构造函数)定义如下:
public ArrayAdapter (Context context, int textViewResourceId, List<T> objects)
在这里textViewResourceId是“包含在实例化视图时使用的TextView的布局文件的资源ID”。请参阅here。
您应该使用R.layout.layout_file传递包含<TextView/>
元素的布局文件。
答案 1 :(得分:1)
dennisg有正确的答案来解决您的问题。
我可以建议您将光标变为数组,从而进行额外的工作吗?您可以直接使用光标创建列表适配器来保存一些周期。
Cursor cursor = database.query(DiaryDbAdapter.DIARY_TABLE,
allColumns, null, null, null, null, null);
getActivity().startManagingCursor(cursor);
String[] from = new String[] { DiaryDbAdapter.DIARY_ENTRY };
int[] to = new int[] { R.id.ListItem1 };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(getActivity(),
R.layout.listlayoutdouble, cursor, from, to);
setListAdapter(adapter);
您的from string []包含您希望包含在显示中的列的列表,to int []包含您希望将数据放入的资源ID(与from数组匹配的顺序)。然后适配器callout指定要使用的行布局,将数据映射到视图的光标和两个数组。