我作爲我的第一個Android應用程序工作在戰艦遊戲。如何在ViewSwitcher動畫發生之前更新GridView?
我決定使用一個包含兩個GridView的ViewSwitcher。 One bUserGrid用於User字段(託管用戶船),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();
那麼這裏onPostExecute()userAttack的第一節開始的AsyncTask computerAttack。在onPreExecute()computerAttack的第一節切換bComputerGrid到bUserGrid通過調用
bigSwitcher.showNext();
交換髮生,但bComputerGrid尚未在此之前更新!
電腦做它的罷工,併成功地通過調用bUserAdapter.notifyDataSetChanged()將刷新onProgressUpdate()computerAttack的部分用戶領域。當計算機錯過時,應用程序會等待用戶再次敲擊(敲擊)。
protected void onProgressUpdate(String... messages) {
...
mUserAdapter.notifyDataSetChanged();
bUserAdapter.notifyDataSetChanged();
}
protected void onPostExecute(Boolean result) {
mComputerBundle = mComputerAttack.getmCBundle();
mComputerAttack=null;
if (field_switch) {
switchViews();
}
}
但爲什麼我不能刷新bComputerGrid是切換前和電腦射擊會發生什麼?
你能幫我嗎?
在更改適配器的基礎數據之前,您確定沒有調用notifyDataSetChanged()嗎?在bComputerAdapter.notifyDataSetChanged()中設置斷點。並看看會發生什麼。 – fiction 2011-01-30 15:13:33
感謝您的關注,虛構!在調用notifyDataSetChanged()之前,我設置了斷點並確保底層數組的更改。 – captaindan 2011-01-30 16:13:04