0

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メソッドです

private 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)); diaryEntryを返します。}

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配列と一致する順序で)。次に、アダプタコールアウトは、使用する行レイアウト、データをビューにマップするカーソルと2つの配列を指定します。

于 2012-04-14T13:26:26.390 に答える