0

OnItemClickListenerリストビューにカーソル アダプタを使用する場合の の動作に関連する 2 つの質問をしたいと思います。すなわち:

getCount()ログを追加するために (いつ呼び出されたかを確認するために)、カーソル アダプターをオーバーライドしました。リストの項目をクリックすると、getCount() が 2 回実行されていることに気付きました。なぜこれが起こっているのかよくわかりません..以下はオーバーライドされgetCount()た . mCursor私のアダプターのカーソルオブジェクトです。

   @Override
public int getCount() {
    if (mCursor != null) {
        int total = mCursor.getCount();
        Log.d(TAG, "Count of cursor is: " + total);
        return total;
    } else
        Log.e(TAG, "Count of cursor is: " + 0);
    return 0;
}

次に、このリスナーから別のアクティビティを開始したいと思います。アイテムをクリックすると、次の例外が発生します。

08-26 14:15:20.487: DEBUG/AgendaAdapter(14110): カーソルの数: 14

08-26 14:15:20.525: DEBUG/AgendaAdapter(14110): カーソルの数: 14

08-26 14:15:20.535: DEBUG/AgendaActivity(14110): 位置は: 2

08-26 14:15:20.535: DEBUG/AgendaActivity (14110): ID は: 353

08-26 14:15:20.535: INFO/ActivityManager(104): 開始アクティビティ: 意図 {AgendaEventActivity (エキストラあり) }

08-26 14:15:20.575: DEBUG/AgendaActivity (14110): onPause

08-26 14:15:20.865: INFO/ActivityManager(104): 表示されたアクティビティ AgendaEventActivity: 287 ミリ秒 (合計 287 ミリ秒)

08-26 14:15:20.875: DEBUG/AgendaAdapter(14110): カーソルの数: 14

08-26 14:15:20.875: DEBUG/AgendaAdapter(14110): カーソルの数: 14

08-26 14:15:20.885: DEBUG/AgendaAdapter(14110): カーソルの数: 14

08-26 14:15:20.885: DEBUG/AgendaAdapter(14110): カーソルの数: 14

08-26 14:15:20.885: DEBUG/AndroidRuntime(14110): VM のシャットダウン

08-26 14:15:20.885: WARN/dalvikvm(14110): threadid=1: キャッチされない例外で終了するスレッド (group=0x40028a00) 08-26 14:15:20.905: エラー/AndroidRuntime(14110): 致命的な例外: メイン08-26 14:15:20.905: エラー/AndroidRuntime(14110): java.lang.IllegalStateException: これは、カーソルが有効な場合にのみ呼び出す必要があります

そのためgetCount()、アイテムをクリックすると が実行され、クリックされたアイテムonItemClickListenerの と のpos2つのログが続きidgetCount()再度呼び出されます... 最後に、現在のアクティビティが一時停止され、開始した新しいアクティビティが this を取得しますIllegalStateException。なぜだか理解できない..

カーソルについては、起動時に managedquery() を使用しました。

どんな助けでも本当に感謝しています!お時間をいただきありがとうございます!

例外のスタック トレースは次のとおりです。

08-26 14:35:17.735: エラー/AndroidRuntime(24173): 致命的な例外: メイン

08-26 14:35:17.735: ERROR/AndroidRuntime(24173): java.lang.IllegalStateException: これは、カーソルが有効な場合にのみ呼び出す必要があります 08-26 14:35:17.735: ERROR/AndroidRuntime(24173): Android で.widget.CursorAdapter.getView(CursorAdapter.java:175)

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.widget.AbsListView.obtainView (AbsListView.java:1294) で

08-26 14:35:17.735: エラー/AndroidRuntime(24173): android.widget.ListView.makeAndAddView(ListView.java:1727) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.widget.ListView.fillSpecific (ListView.java:1272) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.widget.ListView.layoutChildren (ListView.java:1591) で

08-26 14:35:17.735: エラー/AndroidRuntime(24173): android.widget.AbsListView.onLayout(AbsListView.java:1147) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.view.View.layout (View.java:7034) で

08-26 14:35:17.735: エラー/AndroidRuntime(24173): android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249) で

08-26 14:35:17.735: エラー/AndroidRuntime(24173): android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125) で

08-26 14:35:17.735: エラー/AndroidRuntime(24173): android.widget.LinearLayout.onLayout(LinearLayout.java:1042) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.view.View.layout (View.java:7034) で

08-26 14:35:17.735: エラー/AndroidRuntime(24173): android.widget.RelativeLayout.onLayout(RelativeLayout.java:909) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.view.View.layout (View.java:7034) で

08-26 14:35:17.735: エラー/AndroidRuntime(24173): android.widget.FrameLayout.onLayout(FrameLayout.java:333) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.view.View.layout (View.java:7034) で

08-26 14:35:17.735: エラー/AndroidRuntime(24173): android.widget.FrameLayout.onLayout(FrameLayout.java:333) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.view.View.layout (View.java:7034) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.view.ViewRoot.performTraversals (ViewRoot.java:1049) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.view.ViewRoot.handleMessage (ViewRoot.java:1744) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.os.Handler.dispatchMessage (Handler.java:99) で

08-26 14:35:17.735: エラー/AndroidRuntime(24173): android.os.Looper.loop(Looper.java:143)

08-26 14:35:17.735: エラー/AndroidRuntime (24173): android.app.ActivityThread.main (ActivityThread.java:4914) で

08-26 14:35:17.735: エラー/AndroidRuntime(24173): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) で

08-26 14:35:17.735: エラー/AndroidRuntime(24173): java.lang.reflect.Method.invoke(Method.java:521) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:868) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): com.android.internal.os.ZygoteInit.main (ZygoteInit.java:626) で

08-26 14:35:17.735: エラー/AndroidRuntime (24173): dalvik.system.NativeStart.main (ネイティブ メソッド) で

そして、これは getCount() からの dumpStack です:

08-26 14:35:17.615: WARN/System.err(24173): java.lang.Throwable: スタック ダンプ

08-26 14:35:17.695: DEBUG/dalvikvm(24173): GC_FOR_MALLOC が 19264 個のオブジェクトを解放/78ms で 1052704 バイト

08-26 14:35:17.695: WARN/System.err(24173): java.lang.Thread.dumpStack (Thread.java:618) で

08-26 14:35:17.705: WARN/System.err(24173): AgendaAdapter.getCount (AgendaAdapter.java:31) で

08-26 14:35:17.705: WARN/System.err(24173): android.widget.ListView.layoutChildren (ListView.java:1491) で

08-26 14:35:17.705: WARN/System.err(24173): android.widget.AbsListView.onLayout(AbsListView.java:1147) で

08-26 14:35:17.705: WARN/System.err(24173): android.view.View.layout (View.java:7034) で

08-26 14:35:17.705: WARN/System.err(24173): android.widget.LinearLayout.setChildFrame(LinearLayout.java:1249) で

08-26 14:35:17.705: WARN/System.err(24173): android.widget.LinearLayout.layoutVertical(LinearLayout.java:1125) で

08-26 14:35:17.705: WARN/System.err(24173): android.widget.LinearLayout.onLayout(LinearLayout.java:1042) で

08-26 14:35:17.705: WARN/System.err(24173): android.view.View.layout (View.java:7034) で

08-26 14:35:17.705: WARN/System.err(24173): android.widget.RelativeLayout.onLayout(RelativeLayout.java:909) で

08-26 14:35:17.705: WARN/System.err(24173): android.view.View.layout (View.java:7034) で

08-26 14:35:17.715: WARN/System.err(24173): android.widget.FrameLayout.onLayout(FrameLayout.java:333) で

08-26 14:35:17.715: WARN/System.err(24173): android.view.View.layout (View.java:7034) で

08-26 14:35:17.715: WARN/System.err(24173): android.widget.FrameLayout.onLayout(FrameLayout.java:333) で

08-26 14:35:17.715: WARN/System.err(24173): android.view.View.layout (View.java:7034) で

08-26 14:35:17.715: WARN/System.err(24173): android.view.ViewRoot.performTraversals (ViewRoot.java:1049) で

08-26 14:35:17.715: WARN/System.err(24173): android.view.ViewRoot.handleMessage(ViewRoot.java:1744) で

08-26 14:35:17.715: WARN/System.err(24173): android.os.Handler.dispatchMessage (Handler.java:99) で

08-26 14:35:17.715: WARN/System.err(24173): android.os.Looper.loop(Looper.java:143)

08-26 14:35:17.715: WARN/System.err(24173): android.app.ActivityThread.main (ActivityThread.java:4914) で

08-26 14:35:17.715: WARN/System.err(24173): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) で

08-26 14:35:17.715: WARN/System.err(24173): java.lang.reflect.Method.invoke (Method.java:521) で

08-26 14:35:17.715: 警告/System.err(24173): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868) で

08-26 14:35:17.715: 警告/System.err(24173): com.android.internal.os.ZygoteInit.main (ZygoteInit.java:626) で

08-26 14:35:17.715: WARN/System.err(24173): dalvik.system.NativeStart.main (ネイティブ メソッド) で

したがって、 から呼び出されますが、アクティビティのListView後にどのように呼び出すことができますか?onPause()

4

1 に答える 1

0

メソッドにへの呼び出しを入れて、何がそれを呼び出しているかを確認することができThread.dumpStack()ます。getCount()

IllegalStateExceptionからスタックトレースを投稿できますか?

于 2011-08-26T11:32:04.370 に答える