English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Происхождение и описание Fragment
Android работает на различных устройствах, от маленьких телефонов до超大屏幕的平板 и даже телевизоров. В связи с различиями в размерах экранов, в多くе случаев сначала разрабатывается приложение для телефона, а затем копируется и изменяется макет, чтобы адаптировать его к экранам планшетов и других больших устройств. Неужели не возможно сделать приложение, которое может одновременно адаптироваться к телефонам и планшетам?当然了, это возможно. Появление Fragmentов именно для решения таких проблем. Вы можете рассматривать Fragment как составную часть интерфейса Activity, даже интерфейс Activity может состоять из различных Fragmentов. Самое впечатляющее в Fragmentах - это их собственный жизненный цикл и способность принимать и обрабатывать события пользователей, что позволяет избежать написания большого количества кода для обработки событий控件 в Activity. Еще важнее то, что вы можете динамически добавлять, заменять и удалять определенные Fragment.
Вчера изучал Android Fragment. Согласно руководству на официальном сайте, создал класс BlankFragment, наследующийся от Fragment. Затем при компиляции появилась ошибка: }}
Ошибка: Выполнение задачи ':app:processDebugManifest'失败. Не удалось объединить манифест: атрибут meta-data#android.support.VERSION@value value=(26.0.0-beta1) из [com.android.support:design:26.0.0-beta1] AndroidManifest.xml:28:13-41 тоже присутствует в [com.android.support:support-v4:26.1.0] AndroidManifest.xml:28:13-35 value=(26.1.0). Совет: добавьте 'tools:replace="android:value"' к элементу <meta-data> в AndroidManifest.xml на 26 строке 9-28 строка 44 для замены.
Прочесал информацию, и везде говорят разное. Самый неуверенный способ — это когда говорят, что нужно изменить тег в файле manifest с android:name на class. По логам очевидно, что это зависит от версии! В конце концов, нашел решение, совместимое с версией, и нужно добавить следующий код в build.gradle в директории app:
configurations.all { resolutionStrategy.eachDependency { DependencyResolveDetails details -> def requested = details.requested if (requested.group == 'com.android.support') { if (!requested.name.startsWith("multidex")) { details.useVersion '26.0.0-beta1' } } } }
Попробовал и действительно стало лучше. Но этого недостаточно.
Обратите внимание, что именно над этим добавленным кодом описывается библиотеки, необходимые для проекта:
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implement 'com.android.support:appcompat-v7:26.0.0-beta1' implementation 'com.android.support.constraint:constraint-layout:1.0.2' implementation 'com.android.support:design:26.0.0-beta1' implementation 'com.android.support:support-v4:26.1.0' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:0.5' androidTestImplementation 'com.android.support.test.espresso:espresso-core:2.2.2' }
А на этой строке внизу есть красная линия:
implement 'com.android.support:appcompat-v7:26.0.0-beta1'
При наведении курсора на него появляется подсказка:
Все библиотеки com.android.support должны использовать точное такое же specification версии (смешивание версий может привести к сбоям в работе) Найдены версии 26.1.0, 26.0.0-beta1. Примеры включают com.android.support:support-compat:26.1.0 and com.android.support:animated-vector-drawable:26.0.0-beta1
Это не говорится ясно: все библиотеки, зависящие от com.android.support, должны использовать одну и ту же версию! Давайте посмотрим на Dependency, com.android.support:appcompat-v7:26.0.0-beta1 и com.android.support:support-v4:26.1.0 - эти версии противоречат друг другу! Давайте посмотрим на запись в git, 26.1.0 - это новая строка, определенно добавлена при создании класса BlankFragment AndroidStudio автоматически. А теперь вернемся и посмотрим на ошибки, они также говорят об одном и том же?
Нельзя не покритиковать AndroidStudio, если вы хотите автоматически добавлять зависимости версий, то проверьте также совместимость версий. В противном случае лучше не добавлять их, чтобы мы могли это сделать ourselves. Ненавижу такие полуживые автоматизированные вещи, они очень обманчивы.
Кроме того, грамматика файла gradle также очень интересна. Комментарии выполнены в стиле C/C++, объявление функций - в стиле Python, а выражения Lambda немного напоминают C#.
Резюме
Ниже приведены проблемы с несовместимостью версий, с которыми сталкиваются разработчики Android при добавлении fragment, я надеюсь, это поможет вам. Если у вас есть какие-либо вопросы, пожалуйста, оставьте комментарий, и я отвечу вам своевременно. Вновь благодарю всех за поддержку сайта呐喊 руководств!
Заявление: содержимое этой статьи взято из интернета, авторские права принадлежат их законным владельцам, контент был предложен и загружен пользователями Интернета, этот сайт не обладает правами собственности, не underwent редактирование, и не несет ответственности за相关问题. Если вы обнаружите материалы,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (при отправке письма замените # на @) для подачи жалоб,并提供相关证据. При обнаружении нарушений мы немедленно удалим спорные материалы.