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

Composants graphiques Android Discussion :

Probleme ListView + ArrayAdapter


Sujet :

Composants graphiques Android

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 206
    Par défaut Probleme ListView + ArrayAdapter
    Bonjour à tous

    J'essaie depuis plusieurs heures de faire fonctionner ma listView avec un ArrayAdapter, sans succès. J'ai essayé de coder une classe à part pour l'arrayadapter et ça ne fonctionne pas non plus. Même un exemple basique ne fonctionne pas: je n'ai rien qui s'affiche à l'écran. J'ai besoin de votre aide

    Voici mon fichier xml contenant la listView:

    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
    <?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"
        >
     
    	<TabHost
    		android:id="@android:id/tabhost"
    		android:layout_width="match_parent"
    		android:layout_height="match_parent"
    	>
     
    		<TabWidget
    			android:id="@android:id/tabs"
    			android:layout_width="match_parent"
    			android:layout_height="wrap_content"
    		/>
     
    		<FrameLayout
    			android:id="@android:id/tabcontent"
    			android:layout_width="match_parent"
    			android:layout_height="match_parent"
    		>
     
    			<LinearLayout
    				android:id="@android:id/content"
    				android:layout_width="match_parent"
    				android:layout_height="match_parent"
    			>
    			</LinearLayout>
    		</FrameLayout>
     
    	</TabHost>
     
    	<ListView
    		android:layout_width="fill_parent"
    		android:layout_height="fill_parent"
    		android:id="@+id/itemlist" 
    	/>
     
    </LinearLayout>
    Et mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
     
    		itemList = (ListView) findViewById(R.id.itemlist);
    		String[] array = {"a","b","c","d","e","f","g"}; 
    		ArrayList<String> lst = new ArrayList<String>();
    		lst.addAll(Arrays.asList(array));
    		final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
    		android.R.layout.simple_list_item_1, lst);
     
    		itemList.setAdapter(adapter);
     
    	}
    Je n'ai pas mis tout mon code mais le passage qui vous intéresse.
    Ca devrait marcher là non ? :'(

    Merci d'avance pour votre aide

  2. #2
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    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 112
    Par défaut
    Salut,

    Quand tu dis que ça "marche pas". Ca veut dire quoi ?
    Erreur de compilation, d'exécution, rien qui s'affiche à l'écran ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 206
    Par défaut
    Rien ne s'affiche à l'écran

  4. #4
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    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 112
    Par défaut
    Est-ce que tu as essayé d'afficher ta liste sans mettre un tabhost ? Pour voir si l'erreur vient de la liste ou du tabhost .

  5. #5
    Membre éclairé
    Inscrit en
    Décembre 2008
    Messages
    280
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 280
    Par défaut
    As tu essayé sans la TabHost ?!

    As tu fait un "extends ListActivity" sur ton activité ?

    Sinon essaie de créer tes string directement à l'instanciation de ton Array et de mettre cette Array directement dans l'adapter (ce qui voudrais dire que c'est ta conversion qui foire perso j'avais jamais utiliser ta technique, mais j'ai été voir dans les docs ça me parait bon !).

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 206
    Par défaut
    ça fonctionne sans le Tabhost

    Je ne vois pas ce qui bloque, dans le xml ils sont dans le meme linear layout ?

  7. #7
    Membre éclairé
    Inscrit en
    Décembre 2008
    Messages
    280
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 280
    Par défaut
    Je pense qu'il n'est pas possible de combiner les 2 comme ça car :

    - un tabHost possède des onglet qui sont lié à une frame. Cette frame va lancer une activité qui va elle avoir une ListView ou autre.

    nan ?

  8. #8
    Membre éclairé
    Inscrit en
    Décembre 2008
    Messages
    280
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 280
    Par défaut
    Extrait de : http://developer.android.com/resourc...tabwidget.html
    To create a tabbed UI, you need to use a TabHost and a TabWidget. The TabHost must be the root node for the layout, which contains both the TabWidget for displaying the tabs and a FrameLayout for displaying the tab content.
    En gros que l'on peut pas créer 2 UI différente sur la même activité, mais après j'attendrais bien une confirmation sur ce point !

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 206
    Par défaut
    Ok j'avais mal compris le fonctionnement des tabhost, il faut effectivement créer la listview dans le framelayout. Je bosse dessus et je reviens dans 5 minutes si je n'ai pas réussi ^^

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 206
    Par défaut
    J'ai modifié le xml, maintenant j'ai le contenu de ma listView qui s'affiche, mais il prend tout l'écran, il recouvre meme les tabhost, je ne les vois plus que par transparence :s

    voici mon code:

    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
    <?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"
        >
     
    	<TabHost
    		android:id="@android:id/tabhost"
    		android:layout_width="match_parent"
    		android:layout_height="match_parent"
    	>
     
    		<TabWidget
    			android:id="@android:id/tabs"
    			android:layout_width="match_parent"
    			android:layout_height="wrap_content"
    		/>
     
    		<FrameLayout
    			android:id="@android:id/tabcontent"
    			android:layout_width="match_parent"
    			android:layout_height="match_parent"
    		>
    			<LinearLayout
    				android:id="@+id/container"
    				android:layout_width="fill_parent"
    				android:layout_height="fill_parent"
    				>
     
    				<ListView
    					android:layout_width="match_parent"
    					android:layout_height="wrap_content"
    					android:id="@+id/itemlist"
    				/>
    			</LinearLayout>	
    		</FrameLayout>
     
    	</TabHost>
     
    </LinearLayout>
    Je reconnais que ce n'est pas tres lisible, j'espere que vous pourrez lire

    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
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
     
    		tabHost = (TabHost) findViewById(android.R.id.tabhost);
    		tabHost.setup();
    		tabWidget = (TabWidget) findViewById(android.R.id.tabs);
    		frameLayout = (FrameLayout) findViewById(android.R.id.tabcontent);
     
    		dataBase = new FeedsDatabase(this);
    		dataBase.open();
     
    		ArrayList<RSSFeed> feeds = dataBase.getAllFeeds();
    		tabSpecs = new ArrayList<TabHost.TabSpec>();
     
    		indexTab = 0;
     
    		for (RSSFeed feed : feeds) {
     
    			TabSpec tabSpec = tabHost.newTabSpec(feed.getName());
    			tabSpec.setIndicator(feed.getName(), getResources().getDrawable(R.drawable.icon));
    			tabSpec.setContent(R.id.itemlist);
    			tabSpecs.add(tabSpec);
    			indexTab++;
    		}
     
    		for (TabSpec spec : tabSpecs) {
    			tabHost.addTab(spec);
    		}
     
    		itemList = (ListView) findViewById(R.id.itemlist);
    		String[] array = {"a","b","c","d","e","f","g"}; 
    		ArrayList<String> lst = new ArrayList<String>();
    		lst.addAll(Arrays.asList(array));
    		final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
    		android.R.layout.simple_list_item_1, lst);
     
    		itemList.setAdapter(adapter);
     
    		tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
     
    			@Override
    			public void onTabChanged(String tabId) {
     
    				Log.d("setOnTabChangedListener", tabId);
    				refreshItemDisplay(tabId);
    			}
    		});
     
    		dataBase.close();
     
    	}

  11. #11
    Membre éclairé
    Inscrit en
    Décembre 2008
    Messages
    280
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 280
    Par défaut
    Et bien personnellement je n'aurais pas fait comme ça, j'aurais utilisé des TabSpec afin de démarrer une nouvelle activité, qui elle contiendra ton ListView dans un autre fichier XML.

    Donc essaie de trouver sur google des tuto sur les TabHost et maintenant sur les TabSpec.

    Et il y en as !

    PS : oublie pas la doc, au moins tu est sur que ce qui est dit est vrai (même si c'est en anglais il faut bien s'y habituer ), de plus il y a des exemples simples pour ce genre de chose !!!

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 206
    Par défaut
    J'aimerais vraiment faire sans les activity dans la mesure ou les onglets sont dynamiques et issus d'une base de données.

    Ca ne peut pas fonctionner de manière plus simple ?

  13. #13
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    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 112
    Par défaut
    J'ai déjà réalisé quelque chose de semblable.
    Pour ce faire :
    layout.xml : Tu définis un framelayout où tu y places ton listview
    Activity.java : Tu la fait hérité de TabActivity, et le onCreate resemblerait à quelque chose comme ça :
    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
     
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
     
    		TabHost tabHost = getTabHost();
    		tabHost.setup();
     
    LayoutInflater.from(this).inflate(R.layout.monlayoutxmlavecmalistview, tabHost.getTabContentView(), true);
    		tabHost.addTab(tabHost.newTabSpec("tab1")
    				.setIndicator("tab1")
    				.setContent(R.id.idduframelayout));
    		tabHost.addTab(tabHost.newTabSpec("tab2")
    				.setIndicator("tab2")
    				.setContent(R.id.idduframelayout));
     
    		initSubView(); //Ici tu initialises tes composants (listview, adapter ,etc)
    		tabHost.forceLayout();
    		tabHost.setCurrentTab(0);

  14. #14
    Membre éclairé
    Inscrit en
    Décembre 2008
    Messages
    280
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 280
    Par défaut
    Tu peux créer dynamiquement tes onglets même avec une base de donné et avoir des contenus dans une autre activity je ne vois pas le problème !

Discussions similaires

  1. problem listview selectable + with icons
    Par perloutta dans le forum Composants graphiques
    Réponses: 3
    Dernier message: 23/03/2010, 16h27
  2. probleme listview bug
    Par bahrinb dans le forum Windows Forms
    Réponses: 1
    Dernier message: 03/09/2007, 18h59
  3. [debutant] probleme listview
    Par warubi dans le forum VB.NET
    Réponses: 2
    Dernier message: 25/05/2007, 18h33
  4. [debutant] probleme listview
    Par warubi dans le forum VB.NET
    Réponses: 2
    Dernier message: 16/05/2007, 07h19
  5. Probleme listview center
    Par ptitom1381 dans le forum VB.NET
    Réponses: 1
    Dernier message: 18/02/2007, 18h17

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