IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Data Binding de collections; chevron '<' non reconnu dans activity_main.xml


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 4
    Par défaut Data Binding de collections; chevron '<' non reconnu dans activity_main.xml
    Bonjour à tous,
    j'ai beau chercher mes je ne trouve pas la solution à mon problème.
    Dans le fichier activity_main.xml ou je déclare mes data l'attribut type de la balise variable, les chevrons (ArrayList<mon_type>).ne sont pas acceptés.
    Voici mes sources:

    build.gradle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    apply plugin: 'com.android.application'
     
    android {
        compileSdkVersion 23
        buildToolsVersion "23.0.3"
     
        dataBinding{
            enabled = true
        }
     
        defaultConfig {
            applicationId "com.ex.developer.bindcollections"
            minSdkVersion 23
            targetSdkVersion 23
            versionCode 1
            versionName "1.0"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
     
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.12'
        compile 'com.android.support:appcompat-v7:23.3.0'
    }
    AndroidManifest.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.ex.developer.bindcollections">
     
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
     
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
     
    </manifest>
    MainActivity.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    package com.ex.developer.bindcollections;
     
    import android.databinding.DataBindingUtil;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.ArrayAdapter;
     
    import com.ex.developer.bindcollections.databinding.ActivityMainBinding;
     
    import java.util.ArrayList;
     
    public class MainActivity extends AppCompatActivity {
     
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
     
            ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
     
            User user = new User("Dugenou", "Jean-Edouard");
            binding.setUser(user);
     
            ArrayList<User> userList= new ArrayList<>();
            userList.add(user);
            binding.setUserList(userList);
     
            ArrayList<String> stringList = new ArrayList<>();
            stringList.add("Une chaîne bidon !");
            binding.setUserList(userList);
     
            ArrayList<Integer> intList = new ArrayList<>();
            intList.add(1);
            binding.setIntList(intList);
        }
    }

    User.java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    package com.ex.developer.bindcollections;
     
    /**
     * A simple POJO
     */
    public class User {
        public final String nom;
        public final String prenom;
     
        public User(String nom, String prenom){
            this.nom = nom;
            this.prenom = prenom;
        }
    }
    Et le code posant problèmes
    activity_main.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     <?xml version="1.0" encoding="utf-8"?>
    <layout xmlns:android="http://schemas.android.com/apk/res/android">
        <data>
            <!-- import du POJO-->
            <import type="com.ex.developer.bindcollections.User"/>
    
            <!--import des bibliothèques JAVA -->
            <import type="java.util.ArrayList"/>
            <import type="java.lang.Integer"/>
            <import type="java.lang.String"/>
    
            <!-- définition des variable -->
            <variable name="user" type="User"/>
    
            <!-- lignes générant les erreurs -->
            
            <variable name="userList" type="ArrayList<User>"/>
            <variable name="stringList" type="ArrayList<String>"/>
            <variable name="intList" type="ArrayList<Integer>"/>
            
    
        </data>
        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
    
            <TextView android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="dummy"/>
    
        </LinearLayout>
    </layout>
    Si quelqu'un avait une idée ça m'aiderait beaucoup.

    Merci

  2. #2
    Membre chevronné Avatar de Drowan
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2014
    Messages
    460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 460
    Par défaut


    Les chevrons sont des caractères spéciaux, il faut donc spécifier que tu souhaite le caractère chevron et non leur interprétation. Pour cela précède les par le caractère \

    PS : Pense à la balise code pour poster ton code, ça le rendra plus lisible

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 4
    Par défaut
    merci pour la réponse je teste ça.
    Et désolé pour la mise en page.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 4
    Par défaut
    Si j'ai bien compris Drowan tu voulais dire
    remplacer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            <variable name="userList" type="ArrayList<User>"/>
            <variable name="stringList" type="ArrayList<String>"/>
            <variable name="intList" type="ArrayList<Integer>"/>
    par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            <variable name="userList" type="ArrayList\<User\>"/>
            <variable name="stringList" type="ArrayList\<String\>"/>
            <variable name="intList" type="ArrayList\<Integer\>"/>
    Mais malheuresement ça ne marche pas.

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    c'est du xml, le caractère < s'exprime en xml par "&lt;" et le caractère > par "&gt;"

    Les backslash, c'est jsute bon pour du code java et t'as pas besoin d'échaper un <> en java.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            <variable name="userList" type="ArrayList&lt;User&gt;"/>
            <variable name="stringList" type="ArrayList&lt;String&gt;"/>
            <variable name="intList" type="ArrayList&lt;Integer&gt;"/>
    Ceci dit je ne connais pas android, mais je m'étonne que le type d'un généric doive être précisé sur un fichier qui sera utilisé à priori par reflection, alors que le code compilé n'a pas d'information sur les types.

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2016
    Messages : 4
    Par défaut
    J'ai déjà essayé avec &lt; et &gt; mais ça ne marche pas non plus.

    Dans la doc adroïde https://developer.android.com/tools/...ing/guide.html, voici le code utilisé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <data>
        <import type="com.example.User"/>
        <import type="java.util.List"/>
        <variable name="user" type="User"/>
        <variable name="userList" type="List&lt;User>"/>
    </data>
    Que j'utilise &lt; &gt; ou <>, l'erreur que m'indique ANDROID STUDIO : cannot resolve symbol ArrayList<Integer>. validates ressource references inside ANDROID XML files.
    Mais je ne vois pas quelle balise je devrais utiliser !

    En tous cas merci pour vos propositions

  7. #7
    Membre chevronné Avatar de Drowan
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2014
    Messages
    460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2014
    Messages : 460
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Les backslash, c'est jsute bon pour du code java et t'as pas besoin d'échaper un <> en java.
    Je m'excuse donc d'avoir donné une fausse information

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/03/2015, 09h44
  2. Réponses: 12
    Dernier message: 14/06/2006, 17h21
  3. [KeyListener] Non reconnue dans toute la classe
    Par Arnaud F. dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 23/05/2006, 16h38
  4. Critère non reconnu dans la fonction DCount
    Par Ps4 dans le forum Access
    Réponses: 7
    Dernier message: 20/06/2005, 09h02
  5. [EJB] [JSP] Méthode EJB non reconnue dans jsp
    Par stago dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 06/07/2004, 09h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo