2010-06-13 7 views
0

J'essaye de créer un jeu avec une grille 9x9 avec GridView. Chaque élément de la grille est un TextView. Je suis en mesure de définir les valeurs initiales de chaque élément de la grille dans la méthode getView() à "0", mais je veux changer la valeur de chaque grille individuellement après cela, mais j'ai été incapable de le faire.Comment accéder aux éléments individuels dans Android GridView?

J'ai essayé d'ajouter une fonction update() dans ma classe GridAdapter étendue qui prend une position et un nombre à mettre à jour à cette position mais cela ne semble pas fonctionner.

public void update(int position, int number) { 
TextView cell; 
cell = (TextView) getItem(position); 
if (cell != null) 
{ 
    cell.setText(Integer.toString(number)); 
} 
} 

Est-ce que quelqu'un sait comment cela peut être réalisé?

est ici toute la classe GridAdapter en cas besoin,

public class SudokuGridAdapter extends BaseAdapter { 
private Context myContext; 
private TextView[] myCells; 

public SudokuGridAdapter(Context c) { 
    myContext = c; 
    myCells = new TextView[9*9]; 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return 9*9; 
} 

@Override 
public Object getItem(int position) { 
    return myCells[position]; 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return 0; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    TextView cell; 
    if (myCells[position] == null) 
    { 
    cell = myCells[position] = new TextView(myContext); 
    cell.setText("0"); 
     } 
    else 
    { 
     cell = myCells[position]; 
    } 
    return cell; 
} 

public void update(int position, int number) { 
    TextView cell; 
    cell = (TextView) getItem(position); 
    if (cell != null) 
    { 
    cell.setText(Integer.toString(number)); 
    } 
} 

} 
+0

Hey j'essaie de faire la même chose. mais je reçois la cellule comme nulle dans la fonction de mise à jour. pas en mesure d'obtenir la vue. pouvez-vous m'aider? –

Répondre

0

Essayez de mettre "notifyDataSetChanged();" ligne à la fin de votre "mise à jour" méthode.

P.S. Il serait préférable de remplacer le type de tableau "myCells" (et d'afficher le rendu en conséquence) par un autre, plus proche de votre modèle de domaine.

+0

Merci d'essayer cela. N'a pas tout à fait obtenir le deuxième point. Voulez-vous dire remplacer le tableau TextView par un autre type de vue? –

Questions connexes