2010-06-13 31 views
0

我想用GridView创建一个9x9网格的游戏。网格中的每个项目都是一个TextView。 我可以将getView()方法中的网格中的每个项目的初始值设置为“0”,但是我想在这之后单独更改每个网格的值,但无法这样做。如何访问Android GridView中的单个项目?

我试着在我的扩展GridAdapter类中添加一个update()函数,该函数需要一个位置和一个数字来更新该位置,但这似乎不起作用。

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

Doe有人知道这可以实现吗?

这里是整个GridAdapter类在需要的情况下,

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

嘿米试图做类似的事情。但我在更新函数中获取单元格为空。无法查看。你能帮我吗? – 2012-10-25 20:35:05

回答

0

尝试把 “notifyDataSetChanged();”在你的“更新”方法的最后。

P.S.如果将“myCells”数组类型(并相应地查看渲染)替换为更接近域模型的另一个,会更好。

+0

谢谢你会尝试。 没有完全得到第二点。你的意思是说用其他视​​图类型替换TextView数组吗? – 2010-06-14 09:01:54

相关问题