Я работаю над игрой Battleships в качестве моего первого приложения для Android.
Я решил использовать ViewSwitcher, который содержит два GridView.Один 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);
}
});
Если пользовательпропустил, затем в onPostExecute () секции userAttack я вызываю 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 до этого не обновлялся!
Компьютер наносит удар и успешно обновляет поле пользователя в onProgressUpdate () секции computerAttack вызывая bUserAdapter.notifyDataSetChanged () .Когда компьютер пропустил, приложение снова ждет, когда пользователь ударит (нажмите).
protected void onProgressUpdate(String... messages) {
...
mUserAdapter.notifyDataSetChanged();
bUserAdapter.notifyDataSetChanged();
}
protected void onPostExecute(Boolean result) {
mComputerBundle = mComputerAttack.getmCBundle();
mComputerAttack=null;
if (field_switch) {
switchViews();
}
}
Но почему я не могу обновить bComputerGrid до того, как произойдет переключение и выстрел компьютера?
Не могли бы вы мне помочь?