作为我的第一个 Android 应用程序,我开发了 Battleships 游戏。
我决定使用一个拥有两个 GridView 的 ViewSwitcher。一个bUserGrid用于用户字段(托管用户船舶),bComputerGrid用于计算机字段(显示用户截图)。
GridView bComputerGrid, bUserGrid, mComputerGrid, mUserGrid;
ViewSwitcher bigSwitcher, miniSwitcher;
用户罢工(点击计算机字段)。应用程序运行 AsyncTask userAttack,它定义了罢工是否成功。
bComputerGrid.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
runUserAttack(position);
}
});
如果用户错过了,那么在 userAttack 的onPostExecute()部分中,我调用notifyDataSetChanged ()以刷新bComputerGrid。
protected void onPostExecute(String message) {
...
bComputerAdapter.notifyDataSetChanged();
mComputerAdapter.notifyDataSetChanged();
firstmateMsg.setText(message);
mUserBundle = mUserAttack.getmUBundle();
mUserAttack=null;
if (isCancelled()) return;
if (mUserBundle.getBoolean("userMissed")) {
mComputerAttack = new computerAttack();
mComputerAttack.execute(mComputerBundle);
} else {
if (doesWon(seqComputerShips)) {
showDialog(0);
}
}
}
但它不会发生!如果用户错过,以下语句不会更新bComputerGrid 。
bComputerAdapter.notifyDataSetChanged();
然后在 userAttack 的onPostExecute ()部分,我启动 AsyncTask computerAttack。在computerAttack的onPreExecute()部分中,我通过调用将bComputerGrid切换到bUserGrid
bigSwitcher.showNext();
发生切换,但在此之前bComputerGrid尚未更新!
Computer通过调用bUserAdapter.notifyDataSetChanged()执行其罢工并成功刷新computerAttack的onProgressUpdate()部分中的用户字段。当计算机错过时,应用程序来等待用户再次点击(点击)。
protected void onProgressUpdate(String... messages) {
...
mUserAdapter.notifyDataSetChanged();
bUserAdapter.notifyDataSetChanged();
}
protected void onPostExecute(Boolean result) {
mComputerBundle = mComputerAttack.getmCBundle();
mComputerAttack=null;
if (field_switch) {
switchViews();
}
}
但是为什么在切换和计算机拍摄发生之前我不能刷新bComputerGrid呢?
请你帮助我好吗?