CursorAdapter и OnItemClickListener для вопросов, связанных с ListView - PullRequest
0 голосов
/ 26 августа 2011

Я хотел бы ответить на два вопроса, связанных с поведением OnItemClickListener, при использовании адаптера курсора для моего списка.Более конкретно:

Я переопределил getCount() адаптера курсора, чтобы добавить журнал (чтобы проверить, когда он вызывается).Я заметил, что когда я нажимаю на элемент списка, я вижу, что getCount () был выполнен дважды.Я не очень понимаю, почему это происходит .. Ниже приведена переопределенная 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): идентификатор: 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: поток завершается с неперехваченным исключением (группа = 0x40028a00) 08-26 14: 15: 20.905: ОШИБКА / AndroidRuntime (14110): ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основное 08-26 14: 15: 20.905: ОШИБКА / AndroidRuntime (14110): java.lang.IllegalStateException: это должно быть вызвано, только когда курсор действителен

Таким образом, getCount() выполняется, когда я щелкаю по элементу, затем следует два журнала из onItemClickListener сpos и id элемента, по которому щелкнули мышью, а затем getCount() вызывается снова ... Наконец текущее действие приостанавливается, а новое, которое я начинаю, получает IllegalStateException, что я не могу понять, почему..

Для курсора я использовал managedquery () при запуске.

Любая помощь будет очень благодарна!Спасибо за потраченное время!

Трассировка стека исключительной ситуации:

08-26 14: 35: 17.735: ОШИБКА / AndroidRuntime (24173): ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: main

08-26 14: 35: 17.735: ОШИБКА / AndroidRuntime (24173): java.lang.IllegalStateException: эта функция должна вызываться только когда курсор действителен 08-26 14: 35: 17.735: ОШИБКА / 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): at 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.макет (View.java:7034)

08-26 14: 35: 17.735: ОШИБКА / AndroidRuntime (24173): atroid.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): на андроиде.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 (собственный метод)

И это dumpStack из getCount ():

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 объекта / 1052704 байта за 78мс

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): at 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.ошибка (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): at 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 (метод.java: 521)

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

08-26 14: 35: 17.715: WARN / System.err (24173): на com.android.internal.os.ZygoteInit.main (ZygoteInit.java:626)

08-26 14: 35: 17.715: WARN / System.err (24173): at dalvik.system.NativeStart.main (собственный метод)

Таким образом, он вызывается из ListView, но какэто можно назвать после onPause() действия?

1 Ответ

0 голосов
/ 26 августа 2011

Вы можете попробовать вызвать Thread.dumpStack() в вашем методе getCount(), чтобы увидеть, что его вызывает.

Можете ли вы опубликовать трассировку стека из IllegalStateException?

...