0

私は Android アプリを作成しています (Android バージョン 2.1 以降を対象としています)。と を使用しExpandableListViewていSimpleCursorTreeAdapterます。次のシーケンスに従ってクラッシュすることがわかりました。

  1. ExpandableListView空で起動します (つまり、データベースに対応するレコードがありません)。
  2. レコードが追加されます。
  3. で画面に戻りますExpandableListView。これで、グループが表示されます。
  4. グループをクリックして展開すると、アクティビティが強制的に閉じられます。

何日にもわたってインターネットで検索し、アプリケーションのソースと Android のプラットフォーム ソースを苦労してトレースした後
、問題は次のように思われます。)少なくとも1 つのグループが存在する場合。レコードがない (したがってグループがない) 場合、子フィールドのリストは保存されません。後でレコードが追加され、表示された子行にグループを展開すると、プライベート メンバーが null であるため、 がクラッシュします。SimpleCursorTreeAdapter
mChildFromExpandableListViewmChildFrom

したがって、私の回避SimpleCursorTreeAdapter策は、データベースに関連するレコードがある場合にのみインスタンス化することです。そうでない場合は、 の間にインスタンス化を再試行してOnResume()ください。

誰かがクラッシュのより良い理由を持っているか、より良い解決策を持っているなら、それは私(または同じ問題を抱えている他の貧しい人々)にとって役に立ちます. (これは Android プラットフォームのバグだと思います。)

4

1 に答える 1

0

以下を試してください。onCreate() でアダプタをインスタンス化しますが、カーソル引数として null を渡します。次に onResume() で新しい Cursor を作成し、changeCursor()を使用してアダプタに渡します。これにより、データ モデルで何かを変更 (行の追加、削除、編集) するたびに、常に新しいカーソルが取得されます。

于 2011-06-17T10:24:22.363 に答える