0

我正在尝试从 SQLite 数据库中输出一个列表并收到此异常:

android.content.res.Resources$NotFoundException: 来自 xml 类型布局资源 ID #0x102000a 的文件

在检查了类似的问题之后,我确定我的 ListView 被定义为 @id/android:list 但仍然得到相同的异常。当 ListActivity 类中的 onCreate 方法完成时,就会出现问题。getAllDiaryEntries() 方法确实从数据库中获取数据,但同样,一旦它返回 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 方法

private DiaryEntry cursorToDiaryEntry(Cursor cursor) { DiaryEntry diaryEntry = new DiaryEntry(); diaryEntry.setId(cursor.getLong(0)); diaryEntry.setTitle(cursor.getString(1)); diaryEntry.setDate(cursor.getString(2)); diaryEntry.setDescription(cursor.getString(3)); 返回日记条目;}

4

2 回答 2

2

ArrayAdapter 的构造函数(您正在使用的构造函数)定义如下:

public ArrayAdapter (Context context, int textViewResourceId, List<T> objects)

在这里,textViewResourceId 是“包含 TextView 的布局文件的资源 ID,以在实例化视图时使用。”。见这里

<TextView/>您应该使用 R.layout.layout_file传递包含元素的布局文件。

于 2012-04-14T12:51:19.837 回答
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 数组的顺序匹配)。然后适配器标注指定使用哪个行布局、哪个游标以及将数据映射到视图的两个数组。

于 2012-04-14T13:26:26.390 回答