Intereting Posts
Заполнение не работает с определенным фоновым ресурсом Повторное действие андроида при нажатии и удержании кнопки Как рассчитать расстояние между двумя точками, используя их долготу и значение широты Принудительный режим погружения отключен после показа мягкой клавиатуры Регулярное выражение в Android для поля пароля Как программно установить градиент фона на пользовательской панели заголовка? Жизненный цикл класса приложения во время работы службы Как установить часть текстового вида можно щелкнуть Перекос текстового представления в Android Преимущества компиляции кода C с интерфейсом gcc gcc на C ++ Кнопка Google Plus One показывает неправильный счет в приложении для Android (ошибка счетчика) Как создать плавный навигационный ящик Цифровая мягкая клавиатура на Android Диалоговое взаимодействие с панелью действий Android – Забыл пароль хранилища ключей. Могу ли я дешифровать файл хранилища ключей?

Сбой в ListView в AbsListView.obtainView для ListActivity

Я просматриваю обновления содержимого в ListActivity с помощью ContentObserver следующим образом:

protected void onCreate(Bundle savedState) { super.onCreate(savedState); ContentResolver cr = getContentResolver(); Cursor cursor = cr.query(TrackHeader.CONTENT_URI, sTrackListProjection, null, null, null); startManagingCursor(cursor); this.mAdapter = new TrackHeaderDataAdapter(this, R.layout.track_list_item, cursor, sTrackListProjection, null); setListAdapter(mAdapter); Handler handler = new Handler(); mTrackHeaderObserver = new ContentObserver(handler) { @Override public boolean deliverSelfNotifications() { return false; } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); ContentResolver cr = getContentResolver(); mAdapter.changeCursor(cr.query(TrackHeader.CONTENT_URI, sTrackListProjection, null, null, null)); } }; getContentResolver().registerContentObserver (TrackHeader.CONTENT_URI, true, mTrackHeaderObserver); } 

Похоже, что это наблюдатель содержимого – он вызван обратно в поток пользовательского интерфейса, но я получаю следующий случайный крах довольно предсказуемо в базовом ListView:

 02-21 14:06:00.440: ERROR/AndroidRuntime(739): java.lang.NullPointerException 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.AbsListView.obtainView(AbsListView.java:1276) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.ListView.makeAndAddView(ListView.java:1668) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.ListView.fillDown(ListView.java:637) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.ListView.fillSpecific(ListView.java:1224) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.ListView.layoutChildren(ListView.java:1499) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.AbsListView.onLayout(AbsListView.java:1113) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.view.View.layout(View.java:6830) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.view.View.layout(View.java:6830) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.view.View.layout(View.java:6830) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.view.View.layout(View.java:6830) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.LinearLayout.onLayout(LinearLayout.java:918) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.view.View.layout(View.java:6830) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.view.View.layout(View.java:6830) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.view.View.layout(View.java:6830) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.widget.FrameLayout.onLayout(FrameLayout.java:333) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.view.View.layout(View.java:6830) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.view.ViewRoot.performTraversals(ViewRoot.java:996) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.view.ViewRoot.handleMessage(ViewRoot.java:1633) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.os.Handler.dispatchMessage(Handler.java:99) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.os.Looper.loop(Looper.java:123) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at android.app.ActivityThread.main(ActivityThread.java:4363) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at java.lang.reflect.Method.invokeNative(Native Method) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at java.lang.reflect.Method.invoke(Method.java:521) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 02-21 14:06:00.440: ERROR/AndroidRuntime(739): at dalvik.system.NativeStart.main(Native Method) 02-21 14:09:56.159: ERROR/AndroidRuntime(749): ERROR: thread attach failed 02-21 14:09:59.480: ERROR/AndroidRuntime(760): ERROR: thread attach failed 02-21 14:12:19.449: ERROR/AndroidRuntime(778): ERROR: thread attach failed 02-21 14:12:22.779: ERROR/AndroidRuntime(789): ERROR: thread attach failed 02-21 14:12:26.479: ERROR/gralloc(51): [unregister] handle 0x3f13b8 still locked (state=40000001) 

Любой, кто видел что-то подобное раньше, был в тупике в течение нескольких дней …

Тим

Solutions Collecting From Web of "Сбой в ListView в AbsListView.obtainView для ListActivity"

У меня была аналогичная трассировка стека, и я обнаружил, что в некоторых случаях возвращаю null из метода getView ().

Если у вас есть список и расширяйте BaseAdapter или Adapter, чтобы получить собственный список, убедитесь, что getView возвращает ненулевое значение.

Если у вас есть вкладка, и один из ваших фрагментов – это список, который переопределяет Adapter / BaseAdapter, а getView возвращает null, вы получите эту проблему.

Если вы используете статический класс ViewHolder для хранения элементов вида в адаптере, вы можете забыть установить объект viewHolder как тег convertView. Например:

 if (convertView == null) { LayoutInflater mInflater = (LayoutInflater) context .getSystemService(Activity.LAYOUT_INFLATER_SERVICE); convertView = mInflater.inflate(R.layout.adapter_drivers_and_riders, null); holder = new ViewHolder(); holder.tvDate = (TextView)convertView.findViewById(R.id.tvDate); holder.tvTime = (TextView)convertView.findViewById(R.id.tvTime); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } 

В моем случае я не использовал курсор, но имел ту же проблему, я понял, что забыл установить тег как viewHolder для преобразованияView, поэтому, когда первые представления адаптера создаются для списка, это нормально, но когда вы прокручиваете И механизм рециркуляции работает, он падает, поскольку он не может восстановить viewHolder из convertView.

На всякий случай, я хотел бы упомянуть.

Я не использовал changeCursor() . И поскольку запрос, который вы использовали для создания Cursor совпадает с запросом, который вы используете, чтобы «изменить» курсор, я бы changeCursor() вызов changeCursor() прямо и просто вызвал requery() на Cursor который у вас есть.