Question

I ai une application androïde qui montre une vue de grille qui indique:

1

2

3

4

GridView gridview=(GridView)findViewById(R.id.GridView_test);
DataBaseHelper dbhelper=new DataBaseHelper(this);
ArrayList<String> test=new ArrayList<String>(5);
backlinksadapter.add("1");
backlinksadapter.add("2");
backlinksadapter.add("3");
backlinksadapter.add("4");
ArrayAdapter mAdapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, test);
gridview.setAdapter(mAdapter);

En ce moment fonctionne, mais je voudrais montrer la ligne de foreach de la grille, 2 colonnes avec les valeurs d'un tableau à 2 dimensions (quelque chose comme le GridView dans ASP.Net - comme source de données -).

Je voudrais montrer:

1 | Personne 1

2 | Personne 2

3 | Personne 3

4 | Personne 4

Toute idée?

Était-ce utile?

La solution

-t-il d'être une vue de la grille? Est-ce un travail ListView?

I écrit un ListView et ListActivity qui présente deux éléments de chaque rangée. J'ai commencé avec le SDK fourni de mise en page qui répertorie simple_list_item_2.xml deux points par ligne mais place l'un sur l'autre (deux lignes) avec la deuxième ligne en utilisant une police plus petite. Ce que je voulais était à la fois des articles sur la même ligne, un à droite et un à gauche.

D'abord, je copiais le simple_list_item_2.xml dans mon projet de répertoire res / mise en page sous un nouveau nom et changé l'androïde propriété: mode = « twoLine » à « ONELINE », tout en conservant le nom de l'élément de vue comme « TwoLineListItem ». J'ai ensuite remplacé les deux éléments internes avec ceux qui ont fait ce que je voulais.

Dans le code pour initialiser la liste, je créé un MatrixCursor et rempli avec les données souhaitées. Pour prendre en charge deux éléments, chaque ligne de la MatrixCursor nécessite trois colonnes, l'une étant une clé primaire, « _id », et les deux autres colonnes étant les éléments que je voulais afficher. J'étais alors en mesure d'utiliser un SimpleCursorAdapter pour remplir et contrôler ListView.

Mon XML Mise en page Fichier:

 <?xml version="1.0" encoding="utf-8"?>
  <TwoLineListItem
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:paddingTop="2dip"
     android:paddingBottom="2dip"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:minHeight="?android:attr/listPreferredItemHeight"
     android:mode="oneLine"
  >
<TextView
    android:id="@android:id/text1"
    android:gravity="left"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginLeft="6dip"
    android:layout_marginTop="6dip"
    android:textAppearance="?android:attr/textAppearanceLarge"
/>
<TextView
    android:id="@android:id/text2"
    android:gravity="right"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="6dip"
    android:layout_marginTop="6dip"
    android:layout_marginRight="6dip"
    android:layout_toRightOf="@android:id/text1"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="@color/MainFontColor"
/>
</TwoLineListItem>

Notez que j'utilise « gauche » et « droite » android: les valeurs de la gravité pour l'élément latéral gauche justifié à gauche et l'élément de droite justifié à droite. Vous aurez besoin des valeurs de gravité pour votre mise en page plus vous aurez besoin des propriétés pour contrôler la taille de l'élément latéral gauche que je ne l'ai pas besoin.

La méthode dans ma classe ListActivity qui a initialisé la ListView:

private void initListView()
{
    final String   AuthorName    = "Author: ";
    final String   CopyrightName = "CopyRight: ";
    final String   PriceName     = "Price: ";

    final String[] matrix  = { "_id", "name", "value" };
    final String[] columns = { "name", "value" };
    final int[]    layouts = { android.R.id.text1, android.R.id.text2 };

    MatrixCursor  cursor = new MatrixCursor(matrix);

    DecimalFormat formatter = new DecimalFormat("##,##0.00");

    cursor.addRow(new Object[] { key++, AuthorName, mAuthor });
    cursor.addRow(new Object[] { key++, CopyrightName, mCopyright });
    cursor.addRow(new Object[] { key++, PriceName,
            "$" + formatter.format(mPrice) });

    SimpleCursorAdapter data =
        new SimpleCursorAdapter(this,
                R.layout.viewlist_two_items,
                cursor,
                columns,
                layouts);

    setListAdapter( data );

}   // end of initListView()

Le paramètre au constructeur MatrixCursor est un tableau de chaînes qui définissent l'ordre et les noms des colonnes du curseur. Important: Assurez-vous d'ajouter une colonne « _id », sans elle, le MatrixColumn lancera une exception et ne parviennent pas à travailler

Les trois variables, mAuthor, mCopyright et mPrice, trois membres de données dans ma classe ListAdaptor et ils sont initialisés ailleurs. Dans mon code actuel, mAuthor est effectivement construit dans cette méthode à partir d'une liste de noms d'auteur. Les noms des auteurs sont concaténées en une seule chaîne en utilisant « \ n » comme séparateurs entre les noms. Cela provoque les multiples noms d'auteur à apparaître sur des lignes différentes dans la même TextView.

Les paramètres ctor de SimpleCursorAdapter sont l'ID de la vue à utiliser pour chaque liste rangée, le curseur contenant les données, un tableau de chaînes où chaque élément est le nom de la colonne du curseur (dans l'ordre pour les obtenir) et un réseau correspondant de View ID pour la vue à utiliser pour chaque élément dans la ligne de la liste.

Autres conseils

Si vous ne trouvez pas un adaptateur existant qui possède ces propriétés, vous pouvez créer votre propre adaptateur personnalisé et avoir la carte à votre vue.

Le Bonjour, tutoriel GridView montre comment faire cela.

JRL est juste, vous devez écrire votre propre adaptateur personnalisé qui vous permettra de contrôler ce qui sera affiché dans chaque ligne. Vous trouverez peut-être cette utile. Un exemple plus avancé se trouve ici http://developerlife.com/tutorials/?p=327 .

Si vous ne voulez pas / doivent utiliser une liste de TableLayout pourrait afficher vos données aussi bien. Mais ce serait l'approche manuelle puisque vous auriez à remplir chaque cellule.

Le meilleur de succès.

Pourquoi ne pas créer une classe, dont toString() retourne str(id) + " | " + personName, et l'utiliser comme une classe de modèle au lieu de l'objet String?

Vous pouvez simplement ajouter dans votre XML    android: numColumns = "2"

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top