Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

Discussion: ListView avec bouton

  1. #1
    Membre du Club Avatar de ludo86
    Profil pro ludovic lefoulon
    Inscrit en
    avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Nom : ludovic lefoulon
    Âge : 28

    Informations forums :
    Inscription : avril 2007
    Messages : 93
    Points : 40
    Points
    40

    Par défaut ListView avec bouton

    Bonjour,

    J'ai un problème qui commence vraiment à m'énerver.
    Je cherche à mettre au pied d'une ListView 2 boutons. Cependant mon application crash lors de l'execution de la ligne set Adapter.

    Code :
    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
    128
    129
    130
    131
    132
    133
    134
     
    package app.main.launcher;
     
    import java.util.ArrayList;
     
    import android.app.Activity;
    //import android.app.Activity;
    import android.app.ListActivity;
    import android.content.DialogInterface;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.ArrayAdapter;
    import android.widget.Button;
    import android.widget.ListView;
    import android.widget.TextView;
    import android.widget.Toast;
    import android.widget.AdapterView.OnItemClickListener;
     
    public class AndroidFirstApp extends /*List*/Activity{
        /** Called when the activity is first created. */
     
    	private TextView tV = null;
    	private Button okButton = null;
    	private Button cancelButton = null;
    	private ListView listView = null;
     
    	static final String[] COUNTRIES = new String[] {
    	    "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
    	    "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
    	    "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan",
    	    "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium",
    	    "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia",
    	    "Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil", "British Indian Ocean Territory",
    	    "British Virgin Islands", "Brunei", "Bulgaria", "Burkina Faso", "Burundi",
    	    "Cote d'Ivoire", "Cambodia", "Cameroon", "Canada", "Cape Verde",
    	    "Cayman Islands", "Central African Republic", "Chad", "Chile", "China",
    	    "Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo",
    	    "Cook Islands", "Costa Rica", "Croatia", "Cuba", "Cyprus", "Czech Republic",
    	    "Democratic Republic of the Congo", "Denmark", "Djibouti", "Dominica", "Dominican Republic",
    	    "East Timor", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea",
    	    "Estonia", "Ethiopia", "Faeroe Islands", "Falkland Islands", "Fiji", "Finland",
    	    "Former Yugoslav Republic of Macedonia", "France", "French Guiana", "French Polynesia",
    	    "French Southern Territories", "Gabon", "Georgia", "Germany", "Ghana", "Gibraltar",
    	    "Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", "Guatemala", "Guinea", "Guinea-Bissau",
    	    "Guyana", "Haiti", "Heard Island and McDonald Islands", "Honduras", "Hong Kong", "Hungary",
    	    "Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Israel", "Italy", "Jamaica",
    	    "Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Kuwait", "Kyrgyzstan", "Laos",
    	    "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg",
    	    "Macau", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands",
    	    "Martinique", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia", "Moldova",
    	    "Monaco", "Mongolia", "Montserrat", "Morocco", "Mozambique", "Myanmar", "Namibia",
    	    "Nauru", "Nepal", "Netherlands", "Netherlands Antilles", "New Caledonia", "New Zealand",
    	    "Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island", "North Korea", "Northern Marianas",
    	    "Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru",
    	    "Philippines", "Pitcairn Islands", "Poland", "Portugal", "Puerto Rico", "Qatar",
    	    "Reunion", "Romania", "Russia", "Rwanda", "Sqo Tome and Principe", "Saint Helena",
    	    "Saint Kitts and Nevis", "Saint Lucia", "Saint Pierre and Miquelon",
    	    "Saint Vincent and the Grenadines", "Samoa", "San Marino", "Saudi Arabia", "Senegal",
    	    "Seychelles", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands",
    	    "Somalia", "South Africa", "South Georgia and the South Sandwich Islands", "South Korea",
    	    "Spain", "Sri Lanka", "Sudan", "Suriname", "Svalbard and Jan Mayen", "Swaziland", "Sweden",
    	    "Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "The Bahamas",
    	    "The Gambia", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey",
    	    "Turkmenistan", "Turks and Caicos Islands", "Tuvalu", "Virgin Islands", "Uganda",
    	    "Ukraine", "United Arab Emirates", "United Kingdom",
    	    "United States", "United States Minor Outlying Islands", "Uruguay", "Uzbekistan",
    	    "Vanuatu", "Vatican City", "Venezuela", "Vietnam", "Wallis and Futuna", "Western Sahara",
    	    "Yemen", "Yugoslavia", "Zambia", "Zimbabwe"
    	  };
     
    	private void validate(View v){
    	}
     
    	private void cancel(View v){
    	}
     
    	private void getInterfaceElement(){		
    		//R.id.Button01
    		okButton = (Button)findViewById(R.id.Button01);
    		if(okButton != null){
    			okButton.setOnClickListener(new View.OnClickListener() {
    				public void onClick(View v) {
    					validate(v);
    				}
    			});
    		}
     
    		cancelButton = (Button)findViewById(R.id.Button02);
     
    		if(cancelButton != null){
    			cancelButton.setOnClickListener(new View.OnClickListener() {
    				public void onClick(View v) {
    					cancel(v);
    				}
    			});
    		}
     
    		listView = (ListView)findViewById(R.id.ListView01);
    		if(okButton != null)	listView.addFooterView(okButton);
    		if(cancelButton != null)	listView.addFooterView(cancelButton);
    		listView.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES));
     
    		listView.setTextFilterEnabled(true);
    		listView.clearChoices();
    		listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
    		listView.setDividerHeight(1);
     
    		listView.setOnItemClickListener(new OnItemClickListener() {
    		    public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
    		      // When clicked, show a toast with the TextView text
    		      Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
    		          Toast.LENGTH_SHORT).show();
    		    }
    		  });
     
     
    	}
     
        @Override
        //application start
        public void onCreate(Bundle savedInstanceState) {
        	super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
     
            getInterfaceElement();
        }
     
        //application end
        public void onDestroy(){
        	super.onDestroy();
        }
     
    }
    main.xml
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                        android:orientation="vertical"
                        android:layout_width="fill_parent"
                        android:layout_height="fill_parent">
    		<TextView android:id="@+id/TextView01"
    		    	  android:layout_width="fill_parent" 
    		    	  android:layout_height="wrap_content" 
    		    	  android:text="@string/hello"/>
     
    		<ListView android:id="@+id/ListView01" 
    				  android:layout_width="fill_parent"
    				  android:layout_height="wrap_content"/>
     
    		<Button android:text="OK"
    				android:id="@+id/Button01"
    				android:layout_width="150px"
    				android:layout_height="50px"/>
    		<Button android:text="Cancel" 
    				android:id="@+id/Button02"
    				android:layout_width="150px"
    				android:layout_height="50px"/>
    </LinearLayout>
    list_item.xml
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?xml version="1.0" encoding="utf-8"?>
    	<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    	    			  android:layout_width="fill_parent"
    	    			  android:layout_height="fill_parent"
    	    			  android:padding="10dp"
    	    			  android:textSize="16sp" >
    	</TextView>
    J'ai bien sur essayer de le faire en ListActivity. Cependant le :
    Code :
    listView = (ListView)findViewById(R.id.ListView01);
    ne marche pas(me revoie null) et doit être remplacer par un
    Code :
    listView = this.getListView();
    De plus pour boutons avec une ListActivity le code suivant
    Code :
    okButton = (Button)findViewById(R.id.Button01);
    me renvoie à chaque fois null.

    Comment bien faire?

  2. #2
    Rédacteur/Modérateur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2002
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : juin 2002
    Messages : 2 103
    Points : 3 470
    Points
    3 470

    Par défaut

    Salut,

    A première vu pas d'erreur flagrante dans ton code. Tu as repris un exemple de "ListActivity" que tu as ensuite personnalisé ?

    Afin de trouver d'où vient le problème, essaye déjà de mettre cette ligne là en commentaire :
    Et tu essaye de lancer ton application pour voir si le layout qui apparait à l'écran est bien celui que tu as spécifié.
    En fonction du résultat, on pourra tester autres choses.

  3. #3
    Membre du Club Avatar de ludo86
    Profil pro ludovic lefoulon
    Inscrit en
    avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Nom : ludovic lefoulon
    Âge : 28

    Informations forums :
    Inscription : avril 2007
    Messages : 93
    Points : 40
    Points
    40

    Par défaut

    ça vient de là.

    Plus précisément c'est lors du passage dans
    Code :
    1
    2
     
    listView.setAdapter(new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES));
    Mais je ne sais pas pourquoi.

  4. #4
    Rédacteur/Modérateur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2002
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : juin 2002
    Messages : 2 103
    Points : 3 470
    Points
    3 470

    Par défaut

    A mon avis, c'est parce que ton listView est égale à NULL.
    Il n'arrive pas à le retrouvé dans ton layout, et ceci est surement dû à un mauvais mapping quelque part.
    Du coup, essaye de mettre tout ça en commentaire, pour voir si déjà c'est la bonne interface qui s'affiche.

  5. #5
    Membre du Club Avatar de ludo86
    Profil pro ludovic lefoulon
    Inscrit en
    avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Nom : ludovic lefoulon
    Âge : 28

    Informations forums :
    Inscription : avril 2007
    Messages : 93
    Points : 40
    Points
    40

    Par défaut

    Oui,
    C'est la bonne interface qui s'affiche. Je vois les boutons mais mais pas la listeView(bizarre d'ailleurs non).

    Je n'ai pas touché au main.xml, j'ai juste commenté getInterface.

    Je suis un peu perdu

  6. #6
    Rédacteur/Modérateur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2002
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : juin 2002
    Messages : 2 103
    Points : 3 470
    Points
    3 470

    Par défaut

    Vu que je comprenais pas du tout d'où venait ton soucis, je viens de tester ton code.
    Et il fonctionne parfaitement chez moi.

    Lances-tu la bonne activité ?

  7. #7
    Membre du Club Avatar de ludo86
    Profil pro ludovic lefoulon
    Inscrit en
    avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Nom : ludovic lefoulon
    Âge : 28

    Informations forums :
    Inscription : avril 2007
    Messages : 93
    Points : 40
    Points
    40

    Par défaut

    Je n'ai qu'une seule Activité donc je suppose que oui.
    Comment vérifier que je lance la bonne activité? En regardant dans le magnifest.xml?


    N'y a t'il rien à ajouter dans le magnifest car là je ne comprend pas.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="app.main.launcher"
          android:versionCode="1"
          android:versionName="1.0">
        <application android:icon="@drawable/icon" android:label="@string/app_name">
            <activity android:name=".AndroidFirstApp"
                      android:label="@string/app_name">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
     
        </application>
        <uses-sdk android:minSdkVersion="7" />
     
    </manifest>

  8. #8
    Inscrit

    Inscrit en
    février 2008
    Messages
    659
    Détails du profil
    Informations forums :
    Inscription : février 2008
    Messages : 659
    Points : 691
    Points
    691

    Par défaut

    Citation Envoyé par MrDuChnok Voir le message
    Vu que je comprenais pas du tout d'où venait ton soucis, je viens de tester ton code.
    Et il fonctionne parfaitement chez moi.

    Lances-tu la bonne activité ?

    Alors ça sera gentil de zipper ce qui marche et tu lui remet cela en fichier joint; au lieu qu'il perds du temps;

    Moi j'ai regardé de près et attentivement le code mais je voie pas d'erreur.

  9. #9
    Membre du Club
    Inscrit en
    juin 2008
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : juin 2008
    Messages : 179
    Points : 64
    Points
    64

    Par défaut

    Verifie dans l emulateur , option settings >Applications>Manage applications que tu n ' ai pas une autre activite qui tourne en tache de fond ,ca peut creer des conflits des fois

  10. #10
    Rédacteur/Modérateur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2002
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : juin 2002
    Messages : 2 103
    Points : 3 470
    Points
    3 470

    Par défaut

    Je viens encore de vérifier et le problème est plus complexe qu'il n'y parait.
    Essaye de porter ton projet en version 1.5 par exemple (au lieu de la 2.1 que tu utilise actuellement). Et ça devrait marcher.
    Je suis en train de chercher pourquoi ça marche en 1.5 et pas en 2.1.

  11. #11
    Membre du Club Avatar de ludo86
    Profil pro ludovic lefoulon
    Inscrit en
    avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Nom : ludovic lefoulon
    Âge : 28

    Informations forums :
    Inscription : avril 2007
    Messages : 93
    Points : 40
    Points
    40

    Par défaut

    Merci pour cette petite astuce je l'essaye tout de suite

  12. #12
    Membre du Club Avatar de ludo86
    Profil pro ludovic lefoulon
    Inscrit en
    avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Nom : ludovic lefoulon
    Âge : 28

    Informations forums :
    Inscription : avril 2007
    Messages : 93
    Points : 40
    Points
    40

    Par défaut

    Bonne nouvelle sur la 1.5 le programme fonctionne. Cependant je ne vois toujours pas les boutons!!! Pourtant les valeurs de okButton et de cancelButton sont bien différentes de null.

  13. #13
    Membre du Club Avatar de ludo86
    Profil pro ludovic lefoulon
    Inscrit en
    avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Nom : ludovic lefoulon
    Âge : 28

    Informations forums :
    Inscription : avril 2007
    Messages : 93
    Points : 40
    Points
    40

    Par défaut

    Dans la 1.5 je suis arriver à voir les mettre les boutons en manipulant le praametre weight ( 0 : pour la listView et 1 pour les boutons).

    Reste maintenant le mystère de la 2.1

  14. #14
    Rédacteur/Modérateur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2002
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : juin 2002
    Messages : 2 103
    Points : 3 470
    Points
    3 470

    Par défaut

    Oui, ce qu'il se passait avec tes boutons et ta liste, c'est que t'as liste était trop longue. Du coup, elle "dépassait" en bas de l'écran et vu que tes boutons sont en bas de la liste, tu les voyait pas.
    En forcant le "weight" à 1, tu donne pluss de "poids" à ton composant sur l'interface, et du coup, il est présent

    Par contre c'est vrai que c'est un mystère pour le passage 1.5 -> 2.1.
    J'ai pas essayé les versions intermédiaires pour trouver d'où vient le problème.
    tu as cherché sur les mailing list de google ? pour voir si c'est pas un bug référencé...

  15. #15
    Membre du Club Avatar de ludo86
    Profil pro ludovic lefoulon
    Inscrit en
    avril 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Nom : ludovic lefoulon
    Âge : 28

    Informations forums :
    Inscription : avril 2007
    Messages : 93
    Points : 40
    Points
    40

    Par défaut

    Je vais regarder et mettrai la solution.

    Par contre je dois t'avouer que je regardais beaucoup de site popur trouver ma solutions donc j'ai pas forcément regarer les sources...

    Je vais mettre cette discussion à jour dès que j'ai trouvé une solution pour la 2.1 et allé voir du côté de google.

    En tout cas merci pour ton aide.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •