2016-06-14 1 views
0

J'ai essayé de créer une disposition de grille pour ce que j'ai utilisé ci-dessous le code. Mais dans ce code je ne sais pas ce qu'est ItemView et comment l'implémenter. Lorsque je mets ce code dans mon projet, je reçois erreur ne peut pas résoudre le symbole "ItemView". Je suis arrivé ce code de lien ci-dessous -Comment créer ItemView pour GridLayout

https://stackoverflow.com/a/36143314/5726392

public class PrivateSeatViews extends FrameLayout implements View.OnClickListener { 

     private GridLayout mGridView; 
     private int mRowsCount; 
     private int mColsCount; 
     private int mCellSpace; 
     private OnItemClickListener mOnItemClickListener; 

     public PrivateSeatViews(Context context) { 
      super(context); 
      init(context, null); 
     } 

     // other constructors 

     private void init(Context context, AttributeSet attrs) { 
      // default values 

      View layout = inflate(getContext(), R.layout.grid_layout, null); 
      mGridView = (GridLayout) layout.findViewById(R.id.Lower); 
      mGridView.setRowCount(mRowsCount); 
      mGridView.setColumnCount(mColsCount); 
      mGridView.post(new Runnable() { 
       @Override 
       public void run() { 
        int width = getMeasuredWidth()/getColumnsCount(); 
        int height = getMeasuredHeight()/getRowsCount(); 
        for (int i = 0; i < getRowsCount(); i++) { 
         for (int j = 0; j < getColumnsCount(); j++) { 
          GridLayout.LayoutParams params = (GridLayout.LayoutParams) getChildAt(i, j).getL; 
          params.width = width; 
          params.height = height; 
          getChildAt(i, j).setLayoutParams(params); 
         } 
        } 
       } 
      }); 
      addView(layout); 
     } 

     // this method allows to dinamically create grid 
     public void buildChildren(int rowsCount, int colsCount) { 
      mRowsCount = rowsCount; 
      mColsCount = colsCount; 
      mGridView.setRowCount(mRowsCount); 
      mGridView.setColumnCount(mColsCount); 
      buildChildren(); 
     } 

     public void buildChildren() { 
      for (int i = 0; i < getRowsCount(); i++) { 
       for (int j = 0; j < getColumnsCount(); j++) { 
        ItemView1 view = new ItemView1(getContext(), i, j); 
        view.setOnClickListener(this); 
        mGridView.addView(view); 
       } 
      } 
     } 

     public void setOnItemClickListener(OnItemClickListener listener) { 
      mOnItemClickListener = listener; 
     } 

     public ItemView getChildAt(int rowIndex, int columnIndex) { 
      int index = (getColumnsCount() * rowIndex) + columnIndex; 
      return (ItemView) mGridView.getChildAt(index); 
     } 

     public boolean isTouchOn(int rowIndex, int columnIndex) { 
      return getChildAt(rowIndex, columnIndex).isTouchOn(); 
     } 

     public int getColumnsCount() { 
      return mGridView.getColumnCount(); 
     } 

     public int getRowsCount() { 
      return mGridView.getRowCount(); 
     } 

     @Override 
     public void onClick(View v) { 
      if (v instanceof ItemView) { 
       ItemView view = (ItemView) v; 
       if (mOnItemClickListener != null) { 
        mOnItemClickListener.onItemClick(view); 
       } 
      } 
     } 

     public interface OnItemClickListener { 

      void onItemClick(ItemView view); 

     } 

    } 
+0

Qu'essayez-vous de réaliser, pourquoi avez-vous besoin d'utiliser ce code pour créer un gridview? Ne peux-tu pas le définir dans un fichier xml? –

+0

je vais essayer de créer la disposition de siège de bus de sorte que j'ai utilisé la disposition de la grille et les sièges viennent dynamiquement afin que je crée gridlayout par programmation –

+0

ItemView est rien, mais c'est le contrôle de vue dans lequel vous devez lier des données. Donc d'abord spécifier quel type de données que vous avez seulement l'image ou seulement du texte ou du texte et de l'image? En conséquence, votre itemview sera décider – Vickyexpert

Répondre

0

La meilleure façon que j'ai trouvé pour créer le GridView est d'utiliser RecyclerView avec le gestionnaire GridLayouy. implémentations de l'adaptateur est le même que pour RecyclerView normale

Vous pouvez créer gestionnaire GridLayout comme celui-ci

//3 is the row span 
GridLayoutManager a = new GridLayoutManager(this, 3); 

Cela vous aidera à améliorer les performances et de créer votre point de vue avec le motif ViewHolder

Si vous jamais utilisé RecyclerView vous pouvez voir un bon exemple here

+0

je vais essayer puis vous dire ... –

+0

ma mise en page parfois ressembler. Pour ce que j'ai utilisé ??? - http://stackoverflow.com/q/37604922/5726392 –