2013-07-02 3 views
7

Je veux afficher les éléments Arraylist dans Gridview. Mon Arraylist est comme ceci:Comment afficher arraylist dans gridview dans android

1 Bonjour Bonjour

2 Bonjour Bonjour

Si je lie à un contrôle GridView comme ceci:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_list_item_1, event_list); 

    gridview.setAdapter(adapter); 

event_List est mon Arraylist. Grâce à cette approche, j'obtiens une rangée ou un enregistrement Arraylist complet dans une cellule de gridview. Je veux afficher chaque élément comme "Bonjour" d'Arraylist dans chaque cellule de gridview. Comme 1 dans une cellule, "Bonjour" dans une autre cellule et ainsi de suite.

Merci à l'avance

+0

Pourquoi ne pas utiliser BaseAdapter? Il vous donnerait un contrôle total à petit coût de 3-4 fonctions supplémentaires. Votre élément ArrayList contient-il la chaîne "1 Hello Hello"? – sandrstar

+0

C'est comme ceci row = cn.getID() + "," + cn.getMessage() + "," + cn.getTime(); event_list.add (ligne); –

+0

Je n'arrive pas à comprendre, comment fonctionne BaseAdapter? –

Répondre

11

Semble Vous devez utiliser BaseAdapter, car par défaut ArrayAdapter ne peut pas accomplir séparation de l'élément ArrayList en nombre d'éléments.

Ainsi, il ressemblerait à ce qui suit:

public class MyActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     final GridView grid = (GridView) findViewById(R.id.gridView); 
     final ArrayList<String> items = new ArrayList<String>(); 

     items.add("1 , Hello11 , Hello12"); 
     items.add("2 , Hello21 , Hello22"); 

     grid.setAdapter(new GridAdapter(items)); 
    } 

    // Assume it's known 
    private static final int ROW_ITEMS = 3; 

    private static final class GridAdapter extends BaseAdapter { 

     final ArrayList<String> mItems; 
     final int mCount; 

     /** 
     * Default constructor 
     * @param items to fill data to 
     */ 
     private GridAdapter(final ArrayList<String> items) { 

      mCount = items.size() * ROW_ITEMS; 
      mItems = new ArrayList<String>(mCount); 

      // for small size of items it's ok to do it here, sync way 
      for (String item : items) { 
       // get separate string parts, divided by , 
       final String[] parts = item.split(","); 

       // remove spaces from parts 
       for (String part : parts) { 
        part.replace(" ", ""); 
        mItems.add(part); 
       } 
      } 
     } 

     @Override 
     public int getCount() { 
      return mCount; 
     } 

     @Override 
     public Object getItem(final int position) { 
      return mItems.get(position); 
     } 

     @Override 
     public long getItemId(final int position) { 
      return position; 
     } 

     @Override 
     public View getView(final int position, final View convertView, final ViewGroup parent) { 

      View view = convertView; 

      if (view == null) { 
       view = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false); 
      } 

      final TextView text = (TextView) view.findViewById(android.R.id.text1); 

      text.setText(mItems.get(position)); 

      return view; 
     } 
    } 
} 

PRODUIRONT grille avec six éléments. Voir plus dans correspondant Android Guide for Grid View.

+0

Pourquoi déclarer cette sous-classe d'adaptateur comme 'private final'? –

+1

@learnenburn il n'y a aucune raison que quelqu'un à l'extérieur puisse avoir besoin d'y accéder, donc privé. En outre, cette classe n'est pas conçue pour l'héritage - donc finale. Habituellement, c'est une bonne pratique, en partie basée sur Java efficace (ne me souviens pas des éléments exacts du livre). – sandrstar

2

Ou vous utilisez peut-être ceci:

MainActivity.java:

import android.os.Bundle; 
import android.app.Activity; 
import android.support.annotation.NonNull; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.GridView; 
import android.widget.TextView; 

import java.util.ArrayList; 
import java.util.Collection; 
import java.util.Iterator; 
import java.util.List; 
import java.util.ListIterator; 

public class MainActivity extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    List<String> values=new ArrayList<String>(); 
    values.add("Home");values.add("About");values.add("Contact");values.add("Help");values.add("Index"); 
    values.add("Home");values.add("About");values.add("Contact");values.add("Help");values.add("Index"); 
    GridView myGrid=(GridView)findViewById(R.id.grid); 

    myGrid.setAdapter(new ArrayAdapter<String>(this,R.layout.cell,values)); 

    } 
} 

Votre activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 
<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/mySelection" /> 
<GridView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/grid" 
    android:columnWidth="75dip" 
    android:gravity="center" 
    android:horizontalSpacing="5dip" 
    android:numColumns="auto_fit" 
    android:stretchMode="columnWidth" 
    android:verticalSpacing="75dip"> 

</GridView> 

Créer un nouveau fichier xml dans le dossier de mise en page et nommez-le cell.xml et mettez dedans:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp"> 

maintenant courir et profiter. Ceci est sortie:

Hooray

+0

Ce n'est peut-être pas ce que vous voulez exactement. mais c'est une réponse au titre de votre question. –

+0

Ça fonctionne comme ça. Mais je me demande pourquoi. Où le tableau est-il lié au textview?Les vues de texte sont-elles automatiquement choisies pour les chaînes de caractères? – maggocnx

+0

il est lié ici: [myGrid.setAdapter (new ArrayAdapter (this, R.layout.cell, valeurs));] –

Questions connexes