我正在尝试使用GridView创建一个带有9x9网格的游戏。网格中的每个项目都是TextView。 我能够将getView()方法中网格中每个项目的初始值设置为“0”,但是我想在此之后单独更改每个网格的值,但是无法这样做。
我尝试在我的扩展GridAdapter类中添加一个update()函数,该函数在该位置采用位置和数字进行更新,但这似乎没有用。
public void update(int position, int number) {
TextView cell;
cell = (TextView) getItem(position);
if (cell != null)
{
cell.setText(Integer.toString(number));
}
}
有人知道如何实现这一目标吗?
以下是整个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 :(得分:0)
尝试输入“notifyDataSetChanged();”在“更新”方法结束时的行。
P.S。如果将“myCells”数组类型(并相应地查看渲染)替换为更接近您的域模型的另一个数组类型会更好。