English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
La création et l'introduction des Fragments
Android fonctionne sur divers appareils, des téléphones avec des écrans petits, des tablettes avec des écrans très grands même des téléviseurs. Face à la différence des tailles d'écran, dans de nombreux cas, on développe d'abord une application pour les téléphones, puis on copie et on modifie le layout pour l'adapter aux tablettes et aux écrans géants. Est-ce que cela est impossible de faire une application qui peut s'adapter à la fois aux téléphones et aux tablettes ? Bien sûr, cela doit être possible. L'apparition des Fragments vise à résoudre ce problème. Vous pouvez considérer un Fragment comme une composante d'une interface d'Activity, même l'interface d'Activity peut être composée de différents Fragments, ce qui est encore plus cool. Les Fragments ont leur propre cycle de vie et peuvent recevoir et traiter les événements de l'utilisateur, de sorte qu'il n'est pas nécessaire d'écrire du code pour gérer les événements des contrôles dans Activity. Ce qui est encore plus important, vous pouvez ajouter, remplacer et supprimer dynamiquement un Fragment.
Hier, j'ai appris un peu sur les Fragments d'Android. Selon le tutoriel du site officiel, j'ai créé une classe BlankFragment qui hérite de Fragment. Puis, lors de la compilation, une erreur s'est produite :
Error:Execution failed for task ':app:processDebugManifest'. > Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(26.0.0-beta1) from [com.android.support:design:26.0.0-beta1] AndroidManifest.xml:28:13-41 is also present at [com.android.support:support-v4:26.1.0] AndroidManifest.xml:28:13-35 value=(26.1.0). Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:26:9-28:44 to override.
J'ai cherché un peu, il y a beaucoup de choses à dire. Le plus incertain est celui qui dit de changer l'étiquette dans le fichier manifest de android:name à class. Il est clair dans les journaux que cela dépend de la version ! Finalement, j'ai trouvé une solution compatible avec la version, il faut ajouter le code suivant dans build.gradle du répertoire 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' } } } }
J'ai essayé et cela fonctionne vraiment. Mais on ne peut pas s'arrêter là.
Remarquez, juste au-dessus de ce segment de code ajouté, il est décrit que les bibliothèques dépendantes du projet :
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implémentation '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' }
Et cette ligne a une ligne rouge en dessous :
implémentation 'com.android.support:appcompat-v7:26.0.0-beta1'
Suggestion au curseur :
Toutes les bibliothèques com.android.support doivent utiliser la même spécification de version exacte (le mélange de versions peut entraîner des plantages à l'exécution). Versions trouvées 26.1.0, 26.0.0-beta1. Des exemples incluent com.android.support:support-compat:26.1.0 et com.android.support:animated-vector-drawable:26.0.0-beta1
Ce n'est pas clair : toutes les bibliothèques dépendantes de com.android.support doivent utiliser la même version ! Regardons Dependency, com.android.support:appcompat-v7:26.0.0-beta1et com.android.support:support-v4:26.1.0 deux versions sont contradictoires ! Regardons les journaux git,26.1.0 cette ligne est ajoutée récemment, c'est certainement ajouté automatiquement par AndroidStudio lors de la création de la classe BlankFragment. Revenons à la vue de la journalisation des erreurs, ne dit-il pas la même chose ?
Je ne peux pas m'empêcher de blâmer AndroidStudio, vous devez vérifier la compatibilité de version si vous voulez ajouter automatiquement la dépendance de version. Sinon, il vaut mieux ne pas l'ajouter, laissez-nous le faire nous-mêmes. Je déteste ce genre de chose semi-automatique, c'est le plus problématique.
De plus, la syntaxe des fichiers gradle est très intéressante. Les commentaires sont au style C/C++Le style, la déclaration de fonction est au style Python, l'expression Lambda ressemble un peu au C#.
Résumé
Les points mentionnés ci-dessus sont ceux que l'éditeur présente aux utilisateurs sur le problème de non-concordance de version après l'ajout de fragment Android, j'espère que cela aidera les utilisateurs. Si vous avez des questions, laissez un message, l'éditeur répondra à temps. Merci également de votre soutien au site de tutoriels de cri.
Déclaration : Le contenu de cet article est tiré du réseau, la propriété intellectuelle appartient à l'auteur, le contenu est contribué et téléchargé par les utilisateurs d'Internet, ce site n'a pas de propriété, n'a pas été édité par l'homme, ni n'assume la responsabilité juridique. Si vous trouvez du contenu suspect de violation des droits d'auteur, veuillez envoyer un e-mail à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un e-mail pour faire une plainte, et fournir des preuves pertinentes. Une fois confirmé, ce site supprimera immédiatement le contenu suspect de violation de droits d'auteur.)