Intereting Posts
Смешивание представлений Android и GLSurfaceView Pre-Load или Pre-Buffer .mp4 video в разработке приложений для Android Android webView saveState Улучшить большой адаптер ListView с плавным прокруткой, иногда отрывистым Как ограничить приложение Android конкретным устройством? Как использовать приложение Google GDK для погружения Google Glass только с помощью Voice Command? Устройство не отвечает на заданный адрес Как сделать меньший рейтингBar? Создание пробного приложения Android, срок действия которого истекает через определенный период времени Как я могу знать зарегистрированные устройства в моем облаке приложений GCM (список устройств) Не удалось открыть файл на стороне клиента, попробовав сервер. Ошибка в Android. Использование службы для запуска фона и создания уведомлений Некоторые запросы на C2DM в Android Пользовательская анимация Flip между пакетом поддержки андроидов android Сервер не распознает Cookie с телефона Android

Поиск неправильного класса фрагмента с помощью библиотеки совместимости с Android

Я пытаюсь раздуть макет, содержащий фрагмент, используя пакет обратной совместимости и уровень SDK 10. Я взял файл jar и поместил его в папку libs моего проекта. Я расширил FragmentActivity.

Все это отлично работает, когда я запускаю на уровне API 11 на устройстве с экраном XLarge.

Когда я возвращаюсь к компиляции против уровня 10 и запускаю на экране нормального размера, я получаю сбой в том месте, где он создает новую активность и раздувает фрагмент в нем.

Вызвано: java.lang.ClassNotFoundException: android.view.fragment в загрузчике dalvik.system.PathClassLoader [/data/app/com.motoappsummitagenda-1.apk] 04-01 01: 07: 14.311 2870 2870 E AndroidRuntime: at dalvik .system.PathClassLoader.findClass (PathClassLoader.java:243)

Так что это похоже на что-то, где-то ищет android.view.fragment, а не версию совместимости, android.support.v4.app.Fragment. Конечно, android.view.fragment не будет найден на уровне API 10. Но откуда это происходит от android.view.fragment?

XML, который накачивается, является

<?xml version="1.0" encoding="utf-8"?> <fragment xmlns:android="http://schemas.android.com/apk/res/android" android:name="com.motorapp.SessionFragment" android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/sessionfragment"> </fragment> 

Код для него начинается:

 package com.motorapp; import java.util.List; import java.util.ListIterator; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.TextView; import android.support.v4.app.*; import android.support.v4.util.*; import android.support.v4.*; import android.support.v4.widget.*; public class SessionFragment extends android.support.v4.app.Fragment { 

Симптомы подобны этой проблеме, но у меня нет этих ошибок, раздувающих фрагменты с пакетом совместимости

Файл jar android.compatibility.v4.android-support-v4 находится на моем пути сборки в Eclipse в Project> Properties> Java build path

У меня есть в манифесте (и я пробовал разные варианты имени).

В начале работы с фрагментами я впервые использовал API 11 на сотовом устройстве, и все работает отлично. Он получает один и тот же код (модифицированный для использования немного другого API совместимости), работающий с библиотекой совместимости, в которой у меня есть эта проблема. Любые идеи были бы очень желанными. Спасибо, Питер

Solutions Collecting From Web of "Поиск неправильного класса фрагмента с помощью библиотеки совместимости с Android"

У меня была такая же неправильная проблема класса с библиотекой совместимости, и я попробовал все, что упоминалось выше, без везения. Я, наконец, понял это: я использовал неправильный XML- Fragment а не исправлял один fragment . Капитализация, похоже, имеет значение.

Я просто решил эту проблему в машине Android API 8 (Samsung Galaxy S).

Измените класс Activity на FragmentActivity .

  1. public class FragmentLayout extends Activity {} -> public class FragmentLayout extends FragmentActivity {}

  2. public static class DetailsActivity extends Activity {} -> public static class DetailsActivity extends FragmentActivity {}

  3. Наконец getFragmentManager() -> getSupportFragmentManager()

  4. Зарегистрируйте поддержку android-support-v4.jar в Eclipse, на которые ссылаются библиотеки

  5. Поместите android-support-v4.jar в каталог {root directory вашего проекта} / libs

  6. Перейдите в API 10 enum (например: simple_list_item_1) из simple_list_item_activated_1

  7. import android.support.v4.app.Fragment;

Бьюсь об заклад, вы пытаетесь вызвать setConetentView до того, как super.onCreate в вашем FragmentActivity

У меня была именно эта проблема с приложением, работающим на устройствах с предварительной сотой. Я основывал свое кодирование фрагмента на примере, приведенном в блоге в блоге Dianne Hackborn за февраль 2011 года и в другом стандартном справочном материале фрагмента. Решение проблем содержится в справочной ссылке SDK, http://developer.android.com/sdk/compatibility-library.html#Using . Существуют незначительные различия в именах классов и методов, которые должны использоваться в приложениях с фрагментами, когда эти приложения должны быть развернуты с помощью библиотеки совместимости. Ссылка объясняет это.

Библиотека совместимости, загружаемая и установленная, включает примерный код с использованием фрагментов. Ссылка: Разработчики Android> Ресурсы> Пример кода> API 4+ Поддержка демонстраций

Импорт, который вы предоставили, выглядит правильно. Сделайте двойной контроль над любыми другими классами, чтобы убедиться, что Eclipse не импортировал неправильный фрагмент. Другая важная вещь – вам нужно добавить библиотеку совместимости в lib \, которую вы должны создать в корне вашего проекта, чтобы убедиться, что она входит в комплект вашего приложения. Я не знаю, требуется ли это, но у меня всегда есть путь создания проекта к его копии.

Кажется, что в вашем макете отсутствует параметр класса. Я думаю, вы хотели использовать класс, в котором вы использовали имя в своем макете.

 <fragment class="com.example.<class to path to your fragment>" android:id="@+id/items" android:layout_weight="1" android:layout_width="0px" android:layout_height="fill_parent" /> 

В Eclipse вы должны увидеть android-support-v4.jar как для ссылочных библиотек, так и для библиотек.

Я думаю, вы должны удалить android-support-v4.jar из пути сборки. Это приведет к удалению из библиотек ссылок в Eclipse. Затем создайте папку libs и поставьте там банку. Очистите свой проект, и Eclipse добавит банку в зависимости от Android. Это сделало трюк для меня, поскольку я боролся с классом, не найденным исключением.

Я получил

  java.lang.NoClassDefFoundError: com.android.example.SupportFragment at com.android.example.SupportFragmentActivity.onCreate() 

на

 SupportFragment extends SherlockFragment implements PopupMenu.OnMenuItemClickListener ... @Override public boolean onMenuItemClick(android.view.MenuItem item) { return onOptionsItemSelected(item); } 

При попытке сделать приложение api 17 совместимым с api 8, единственным признаком была ошибка logcat выше, поэтому убедитесь, что все импортированные классы поддерживаются, если вы получили эту ошибку.