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 :

[Fragment] Construction d'un arrayAdapter personnalisé


Sujet :

Android

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut [Fragment] Construction d'un arrayAdapter personnalisé
    Bonjour!

    J'Essaye tout simplement de créer une liste avec 2 textviews, une à gauche et une à droite. J'Essaye également de leur donner une police spécifique. Je ne comprends pas pourquoi mon code ci-dessous ne crée rien à la sélection du fragment (page blanche).

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    public class MoviesFragment extends ListFragment {
     
     
    	MyArrayAdapter adapter;
     
     
    	@Override
    	public View onCreateView(LayoutInflater inflater, ViewGroup container,
    			Bundle savedInstanceState) {
     
    		return super.onCreateView(inflater, container, savedInstanceState);  
    	}
     
    	@Override
    	  public void onActivityCreated(Bundle savedInstanceState) {
    	    super.onActivityCreated(savedInstanceState);
     
    	ArrayList<Map<String, String>> list = buildData();  
        MyArrayAdapter adapter = new MyArrayAdapter(getActivity(), list);  
        setListAdapter(adapter);
     
    }
     
    	  private ArrayList<Map<String, String>> buildData() {
    		    ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>();
    		    list.add(putData("Greek Yoghourt & Fruit","£2.25"));
    		    list.add(putData("Fruit Cobbler", "£2.25"));
    		    list.add(putData("Honey Roasted Fruit & Yoghurt", "£2.25"));          //PutData is defined below
    		    list.add(putData("Fruit Fool", "£2.25"));
    		    list.add(putData("Bircher",  "£2.25"));
    		    list.add(putData("Porridge","£1.95"));
    		    list.add(putData("Stewed Fruit Topping","£0.50"));
    		    list.add(putData("Candied Pralines","£0.50"));
    		    list.add(putData("House Bacon", "£3.75"));
    		    list.add(putData("Simply Bacon","£3.75"));
    		    list.add(putData("House Mushroom", "£3.50"));
    		    list.add(putData("Peanut Butter & Homemade Jam", "£3.50"));
    		    list.add(putData("Eggs on toast","£4.00"));
    		    list.add(putData("House Eggs","£4.75"));
    		    list.add(putData("Spanish Eggs","£4.75"));
    		    list.add(putData("Smoked Salmon Eggs","£4.75"));
    		    list.add(putData("The Full Breakfast","£5.25"));
    			list.add(putData("Chorizo Hash", "£5.25"));
    		    return list;
    		  }
     
    	  private HashMap<String, String> putData(String name, String purpose) {
    		    HashMap<String, String> item = new HashMap<String, String>();
    		    item.put("name", name);
    		    item.put("purpose", purpose);
    		    return item;
    		  }
     
     
    	public class MyArrayAdapter extends ArrayAdapter<HashMap<String, String>> {
     
            public MyArrayAdapter(Context context, ArrayList<Map<String,String>> list) {
                super(context, R.layout.row_layouts, R.id.label);
            }
     
           public MyArrayAdapter(Context context, HashMap<String, String>[] items) {
                super(context, R.layout.row_layouts, R.id.label, items);
            }
     
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
     
                View view = super.getView(position, convertView, parent);
                TextView textView1 = (TextView) view.findViewById(R.id.label);
                textView1.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/typewriter.ttf"));
                TextView textView2 = (TextView) view.findViewById(R.id.price);
                textView2.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/typewriter.ttf"));
     
                return view;
            }     
        }
     
    }

  2. #2
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Bonjour,
    je pense que l'initialisation de la vue d'affichage d'un fragment se fait dans sa méthode onCreateView(...) sauf indication contraire. n'étant pas trop fan de ListFragment, je fais tout à mon vouloir malgré le peu de temps que ça me consomme (c'est déjà une habitude ) en créant un fragment simple, une view xml pour le contenu de mon fragment que j'inflate dans sa méthode onCreateView(...). Toujours à l'intérieur de cette même méthode, j'initialise ma ListView, mon adaptateur etc. Puis je passe l'adaptateur à ma ListView. Pour ton cas, différent de mon approche, je te demande d'essayer de prendre le contenu de la méthode onActivityCreated(...) et le mettre dans onCreateView(...) de ta classe ListFragment.
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bonjour!

    Merci de ta réponse!

    Pourrais-je savoir pour quelle(s) raison(s) tu évites à tout prix le ListFragment?

    Par ailleurs j'ai fait ce que tu m'as conseillé de faire (littéralement couper/coller le contenu de OnViewCreated vers OnCreateView, et le problème reste entier. Je n'ai aucune erreur à la compilation ni à l'exécution, simplement j'ai une page blanche.

    Merci d'avance pour votre aide,
    Shannou06

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 474
    Points : 586
    Points
    586
    Par défaut
    Tu as oublié une chose dans la réponse de MasterMbg, inflater ton fichier xml.
    Donc dans ta méthode onCreateView doit contenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
    	    Bundle savedInstanceState) {
    	View mainView = inflater.inflate(R.layout.mon_fichier_layout, container,
    		false);
    et finir par
    et surtout ton xml DOIT être configuré ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     <ListView
            android:id="@id/android:list"
    />
     
        <TextView
            android:id="@id/android:empty"
     />

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Ah! Merci Turvy, tu m'as partiellement aidé! Je savais qu'il fallait que le lis mon XML et mon fragment. Maintenant ma View est instanciée (inflated), car le fond est maintenant noir (" android:background="#000000"" dans mon LinearLayout). J'Ai aussi changé mon XML, mais j'avais déjà la listView correctement initialisée et ça n'a rien changé.

    Je recopie mon code en entier, mais les changements n'ont été effectués que dans OnCreateView. Je ne comprends pas. Il semblerait que l'ArrayList list soit vide, car je n'ai plus aucune erreur et mon LinearLayout est instancié.

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    public class MoviesFragment extends ListFragment {
     
     
    	MyArrayAdapter adapter;
    	ArrayList<Map<String, String>> list = buildData(); 
     
    	@Override
    	public View onCreateView(LayoutInflater inflater, ViewGroup container,
    			Bundle savedInstanceState) {
    		View mainView = inflater.inflate(R.layout.row_layouts, container, false);
     
    	    MyArrayAdapter adapter = new MyArrayAdapter(getActivity(), list);  
    	    setListAdapter(adapter);
    	    return mainView; 
    	}
     
    	@Override
    	  public void onActivityCreated(Bundle savedInstanceState) {
    	    super.onActivityCreated(savedInstanceState);
     
     
    }
     
    	  private ArrayList<Map<String, String>> buildData() {
    		    ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>();
    		    list.add(putData("Greek Yoghourt & Fruit","£2.25"));
    		    list.add(putData("Fruit Cobbler", "£2.25"));
    		    list.add(putData("Honey Roasted Fruit & Yoghurt", "£2.25"));          //PutData is defined below
    		    list.add(putData("Fruit Fool", "£2.25"));
    		    list.add(putData("Bircher",  "£2.25"));
    		    list.add(putData("Porridge","£1.95"));
    		    list.add(putData("Stewed Fruit Topping","£0.50"));
    		    list.add(putData("Candied Pralines","£0.50"));
    		    list.add(putData("House Bacon", "£3.75"));
    		    list.add(putData("Simply Bacon","£3.75"));
    		    list.add(putData("House Mushroom", "£3.50"));
    		    list.add(putData("Peanut Butter & Homemade Jam", "£3.50"));
    		    list.add(putData("Eggs on toast","£4.00"));
    		    list.add(putData("House Eggs","£4.75"));
    		    list.add(putData("Spanish Eggs","£4.75"));
    		    list.add(putData("Smoked Salmon Eggs","£4.75"));
    		    list.add(putData("The Full Breakfast","£5.25"));
    			list.add(putData("Chorizo Hash", "£5.25"));
    		    return list;
    		  }
     
    	  private HashMap<String, String> putData(String name, String purpose) {
    		    HashMap<String, String> item = new HashMap<String, String>();
    		    item.put("name", name);
    		    item.put("purpose", purpose);
    		    return item;
    		  }
     
     
    	public class MyArrayAdapter extends ArrayAdapter<HashMap<String, String>> {
     
            public MyArrayAdapter(Context context, ArrayList<Map<String,String>> list) {
                super(context, R.layout.row_layouts, R.id.label);
            }
     
           public MyArrayAdapter(Context context, HashMap<String, String>[] items) {
                super(context, R.layout.row_layouts, R.id.label, items);
            }
     
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
     
                View view = super.getView(position, convertView, parent);
                TextView textView1 = (TextView) view.findViewById(R.id.label);
                textView1.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/typewriter.ttf"));
                TextView textView2 = (TextView) view.findViewById(R.id.price);
                textView2.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/typewriter.ttf"));
     
                return view;
            }     
        }
     
    }

    EDIT: Lorsque j'utilise un SimpleAdapter, et non un custom, la liste apparaît bien mais je ne peux pas changer la police car j'utilise l'adapter de base. C'est donc bien dans la construction de MyArrayAdapter que le problème se pose!

    Voici le code que j'utilise avec mon SimpleAdapter:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	@Override
    	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
     
    		View mainView = inflater.inflate(R.layout.row_layouts, container, false);
     
    	       ArrayList<Map<String, String>> list = buildData();
    	       String[] from = { "name", "purpose" };
    	       int[] to = { R.id.label, R.id.price };
     
    	       SimpleAdapter adapter = new SimpleAdapter(getActivity(), list, R.layout.row_layouts, from, to);  //A SimpleAdapter(context, data source, layout for each row, from, to)
    	       setListAdapter(adapter);
     
    	    return mainView; 
    	}
    Et voici un screenshot de ce que j'obtiens!

    Nom : Capture.PNG
Affichages : 862
Taille : 28,5 Ko


    J'Espère que cela va éclaircir le problème!
    Merci encore pour votre aide!

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 474
    Points : 586
    Points
    586
    Par défaut
    Je n'avais pas bien vu au début, mais il semblerait que ton adapter ne soit pas très bon. Prends exemple ici (http://stackoverflow.com/questions/2...adaptermyclass) ou ici(http://www.piwai.info/android-adapter-good-practices/)

  7. #7
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Citation Envoyé par Shannou06 Voir le message
    Pourrais-je savoir pour quelle(s) raison(s) tu évites à tout prix le ListFragment?
    Bonjour,
    Ce n'est pas que j'évite à tout prix utiliser ListFragment. J'avoue ne le pas utilisé parce je n'ai pas encore eu besoin d'afficher une liste pour occuper l'entièreté du fragment.
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bonjour!

    J'Ai réussi à faire ce que je voulais:

    Nom : Capture1.PNG
Affichages : 857
Taille : 44,5 Ko

    Avec le code suivant:

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    public class MoviesFragment extends ListFragment {
     
    	MyArrayAdapter adapter; 
    	ArrayList<MyClass> myList = new ArrayList<MyClass>();
     
    	@Override
    	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
     
    		   View mainView = inflater.inflate(R.layout.row_layouts, container, false);		   
    	       MyClassAdapter adapter = new MyClassAdapter(getActivity(), R.layout.row_layouts, myList);
     
    	       MyClass food = new MyClass("Greek Yoghourt & Fruit", "£2.25");
    	       MyClass food1 = new MyClass("Fruit Cobbler", "£2.25");
    	       MyClass food2 = new MyClass("Honey Roasted Fruit & Yoghurt", "£2.25");
    	       MyClass food3 = new MyClass("Fruit Fool", "£2.25");
    	       MyClass food4 = new MyClass("Porridge", "£2.25");
    	       MyClass food5 = new MyClass("Stewed Fruit Topping", "£1.95");
    	       MyClass food6 = new MyClass("Candied Pralines", "£0.50");
    	       MyClass food7 = new MyClass("House Bacon", "£0.50");
    	       MyClass food8 = new MyClass("Simply Bacon", "£3.75");
    	       MyClass food9= new MyClass("House Mushroom", "£3.75");
    	       MyClass food10 = new MyClass("Peanut Butter & Homemade Jam", "£3.50");
    	       MyClass food11 = new MyClass("Eggs on toast", "£4.00");
    	       MyClass food12 = new MyClass("House Eggs", "£4.75");
    	       MyClass food13 = new MyClass("Spanish Eggs", "£4.75");
    	       MyClass food14 = new MyClass("Smoked Salmon Eggs", "£4.75");
    	       MyClass food15 = new MyClass("The Full Breakfast", "£5.25");
    	       MyClass food16 = new MyClass("Chorizo Hash", "£5.25");
     
    	       adapter.add(food);
    	       adapter.add(food1);
    	       adapter.add(food2);
    	       adapter.add(food3);
    	       adapter.add(food4);
    	       adapter.add(food5);
    	       adapter.add(food6);
    	       adapter.add(food7);
    	       adapter.add(food8);
    	       adapter.add(food9);
    	       adapter.add(food10);
    	       adapter.add(food11);
    	       adapter.add(food12);
    	       adapter.add(food13);
    	       adapter.add(food14);
    	       adapter.add(food15);
    	       adapter.add(food16);
     
    	       setListAdapter(adapter);
     
    	    return mainView; 
    	}
     
    	  public class MyClass {
    		    public String plat;
    		    public String prix;
     
    		    public MyClass(String plat, String prix) {
    		       this.plat = plat;
    		       this.prix = prix;
    		    }
    		}
     
     
    	  public class MyClassAdapter extends ArrayAdapter<MyClass> {
    		  ViewHolder viewHolder = new ViewHolder();
    		    public class ViewHolder {
    		        TextView itemView1;
    		        TextView itemView2;
    		    }
     
    		    public MyClassAdapter(Context context, int textViewResourceId, ArrayList<MyClass> items) {
    		        super(context, textViewResourceId, items);
    		    }
     
    		    @Override
    		    public View getView(int position, View convertView, ViewGroup parent) {
    		       // Get the data item for this position
    		       MyClass mClass = getItem(position); 
    		       // Check if an existing view is being reused, otherwise inflate the view
    		       ViewHolder viewHolder; // view lookup cache stored in tag
    		       if (convertView == null) {
    		    	  viewHolder = new ViewHolder();
    		          convertView = LayoutInflater.from(getContext()).inflate(R.layout.row_layouts, parent, false);
    		          convertView.setTag(viewHolder);   
    		       }else {
    		           viewHolder = (ViewHolder) convertView.getTag();
    		       }
     
    		       // Lookup view for data population
    		       TextView tvName = (TextView) convertView.findViewById(R.id.label);
    		       TextView tvHome = (TextView) convertView.findViewById(R.id.price);
    		       // Populate the data into the template view using the data object
    		       tvName.setText(mClass.plat);
    		       tvHome.setText(mClass.prix);
     
    		       tvName.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/typewriter.ttf"));
    		       tvHome.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/typewriter.ttf"));
    		       // Return the completed view to render on screen
    		       return convertView;
    		   }
    		}
     
     
    	public class MyArrayAdapter extends ArrayAdapter<HashMap<String, String>> {
     
            public MyArrayAdapter(Context context, ArrayList<Map<String,String>> list) {
                super(context, R.layout.row_layouts, R.id.price);
            }
     
           public MyArrayAdapter(Context context, HashMap<String, String>[] items) {
                super(context, R.layout.row_layouts, R.id.price, items);
            }
     
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
     
                View view = super.getView(position, convertView, parent);
                TextView textView1 = (TextView) view.findViewById(R.id.label);
                textView1.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/typewriter.ttf"));
                TextView textView2 = (TextView) view.findViewById(R.id.price);
                textView2.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/typewriter.ttf"));
     
                return view;
            }     
        }
     
    }
    Bon vous reconnaîtrez que c'est pas idéal.. Nottament du point de vue de l'utilisateur, car le menu commence 10dp plus bas qu'il ne devrait. Il m'est impossible de le déplacer, je ne sais pourquoi.Voici mon 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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout 
        android:background="#000000"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
       	android:layout_gravity="center_vertical"
        >
     <TextView
    		android:id="@+id/label"
    		android:layout_width="wrap_content"
    		android:layout_height="wrap_content"
     
    	   	android:padding="5sp"
            android:textSize="18sp"
    	   	android:textColor="#FFF"
    		/>
     
       	<LinearLayout 
    	    android:orientation="vertical"
    	    android:layout_width="0dp"
    	    android:layout_height="wrap_content"
    	   	android:layout_gravity="center_vertical"
    	   	android:paddingRight="5sp"
    	    android:layout_weight="1"
    	    > 
     
    	     <TextView android:id="@+id/price"
    	         android:layout_width="wrap_content"
    	         android:layout_height="wrap_content"
    	         android:layout_gravity="end"    
    	         android:textSize="18sp"
    	         android:textColor="#FFF" /> 
     
     
     
         <ListView 
    	        android:id="@android:id/list"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
    	        />
        <TextView
            android:id="@id/android:empty"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    </LinearLayout>
    </LinearLayout>
    Le problème viendrait-il de là?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 474
    Points : 586
    Points
    586
    Par défaut
    Coté code, je te conseillerai de vraiment tout séparer, c'est à dire une classe pour le Fragment, une pour la Classe, et une pour l'adapteur. Tu vas vite galérer sinon dès que t'auras plus de contenu.
    Si tu es sur Eclipse, Ctrl+Shift+F pour aligner correctement ton code.
    sp est surtout pour les tailles de textes, utilises plutot dp sinon (ex les paddings).

    Pour l'espace en haut, c'est normal, tu as un LinearLayout avec un TextView (id = price) et la ListView. Tu as surement voulu faire un header avec 2 mots, "label" et "price", mais ton layout est mauvais, il devrait plutot ressembler à ca
    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
    37
    38
    39
    40
    41
    42
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:background="#000000"
        android:orientation="vertical" >
     
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:orientation="horizontal"
            android:paddingRight="5dp" >
     
            <TextView
                android:id="@+id/label"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:textColor="#FFF"
                android:textSize="18sp" />
     
            <TextView
                android:id="@+id/price"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="end"
                android:textColor="#FFF"
                android:textSize="18sp" />
        </LinearLayout>
     
        <ListView
            android:id="@android:id/list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
     
        <TextView
            android:id="@id/android:empty"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
     
    </LinearLayout>
    Mais, pour la raison évoquée par MasterMbg, tu ne pourrais pas gérer ton header avec un listfragment qui ne gère que les listes.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Re-bonjour!

    Désolé de faire réchauffé, entre les fêtes et la reprise, j'ai eu peu de temps à consacrer à la programmation..!

    Le layout de Turvy n'arrange pas mon problème. Je pensais pourtant que ça l'aurait résolu..

    Nom : Screenshot_2015-01-15-21-39-43.png
Affichages : 968
Taille : 70,2 Ko

    Voilà le résultat.
    Je ne comprends toujours pas pourquoi ça ne fonctionne pas.

    Si je supprime le premier linearLayout voilà ce que j'obtiens:

    Nom : Screenshot_2015-01-15-22-22-06.png
Affichages : 945
Taille : 95,4 Ko

    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
    37
    <?xml version="1.0" encoding="utf-8"?>
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:background="#000000"
            android:paddingRight="5dp" >
     
            <TextView
                android:id="@+id/label"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="2dp"
                android:textColor="#FFF"
                android:textSize="18sp" />
     
            <TextView
                android:id="@+id/price"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:maxLines="1"
                android:layout_gravity="end"
                android:textColor="#FFF"
                android:textSize="18sp" />
     
     
        <ListView
            android:id="@android:id/list"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
     
        <TextView
            android:id="@id/android:empty"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
     
        </LinearLayout>
    Ainsi, je ne retiens qu'un seul LinearLayout. Si je passe de Horizontal à Vertical, voici ce que j'obtiens:


    Nom : Screenshot_2015-01-15-22-22-41.png
Affichages : 865
Taille : 59,2 Ko


    Je ne comprends pas trop pourquoi le layout change de cette façon. Je trouve la doc assez obscure sur les layouts. De ce que je comprends il y a un problème imbrication de LinearLayouts..? Mais je ne vois pas en quoi cela empêche le textView de s'adapter à l'attribut 'layout_gravity="end"' au niveau de mon deuxième screenshot.

    Merci encore d'avance,
    Shannou06

  11. #11
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

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

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Citation Envoyé par Shannou06 Voir le message
    Je ne comprends pas trop pourquoi le layout change de cette façon. Je trouve la doc assez obscure sur les layouts. De ce que je comprends il y a un problème imbrication de LinearLayouts..? Mais je ne vois pas en quoi cela empêche le textView de s'adapter à l'attribut 'layout_gravity="end"' au niveau de mon deuxième screenshot.
    Shannou06
    Pourquoi ne pas utiliser RelativeLayout à la place? Cela à la réputation de faciliter la disposition des composants où l'on veut. Ceci étant dit, l'utilisation des LinearLayout imbriqués (de façon exagérée) nuit déjà à la performance de l'application.
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 474
    Points : 586
    Points
    586
    Par défaut
    Autre chose que je viens de m'apercevoir, tu as gardé ton ListFragment. Et je crois qu'une ListActivity ou Listfragment n'inflate qu'une liste, et rien d'autre (à vérifier).
    Donc si tu passes par un simple fragment, en faisant les modif nécessaires au code, tu auras ton header comme il faut.

  13. #13
    Futur Membre du Club
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2014
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2014
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Merci encore pour vos réponses!
    Je vais me renseigner concernant les différences entre Fragment et ListFragment.

    Master, je vais essayer ton idée même si je doute que ce soit à l'origine de mon problème!


    EDIT: Enorme bigup à Master! Un simple changement en RelativeLayout et l'alignement requis et le tour fut joué! C'est pas efficace au niveau des performances (effectivement ça lague sur mon Fairphone mais c'est présentable!).

    J'ai remarqué que lorsque je clique sur mon 3ème onglet où ya la liste (et non slide dessus) la liste se ré-implémente ce qui fait que je peux me retrouver avec 2/3 fois la même liste. Serait-ce dû avec le recycle des container? J'Ai copié collé ce bout de code sans vraiment le comprendre car je savais que c'était secondaire (et je m'y attaque donc maintenant).

    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
    @Override
    		public View getView(int position, View convertView, ViewGroup parent) {
    			// Get the data item for this position
    			MyClass mClass = getItem(position);
    			// Check if an existing view is being reused, otherwise inflate the
    			// view
    			ViewHolder viewHolder; // view lookup cache stored in tag
    			if (convertView == null) {
    				viewHolder = new ViewHolder();
    				convertView = LayoutInflater.from(getContext()).inflate(
    						R.layout.row_layouts, parent, false);
    				convertView.setTag(viewHolder);
    			} else {
    				viewHolder = (ViewHolder) convertView.getTag();
    			}
    Merci encore à vous deux pour votre aide super précieuse!

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/08/2013, 00h03
  2. Réponses: 4
    Dernier message: 05/03/2013, 10h05
  3. [JBuilder 7] Construction d'executable natif
    Par renaudfaucon dans le forum JBuilder
    Réponses: 3
    Dernier message: 24/11/2006, 22h28
  4. [jAPI]Probleme de construction
    Par exe dans le forum C++Builder
    Réponses: 10
    Dernier message: 07/08/2003, 10h03
  5. Fragmentation du DD
    Par guillaume_pfr dans le forum Administration système
    Réponses: 5
    Dernier message: 05/06/2003, 17h19

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