а) Я почти уверен, что вам не нужно лишать законной силы TextViews после того, как вы их установили;Android должен делать это автоматически.
b) Теоретически вы должны установить свои TextView
ссылки в качестве переменных-членов, а затем ссылаться на них в onPostExecute
вместо того, чтобы передавать их в doInBackground
.doInBackground
в свою очередь будет принимать те биты данных, которые позволят вам рассчитать новый счет.Что бы вы сделали на doInBackground
, это действие, которое приведет к вычислению нового балла.Возвращаемое значение из doInBackground
передается в onPostExecute
.Затем вы обновите TextView (теперь переменная-член) с этими данными в onPostExecute
.Имеет ли это смысл?На самом деле вы не разместили здесь ни одного кода, который бы обновлял эти значения.
См. здесь для быстрого примера.
private TextView myScoreView; //initialized in onCreate as you do above.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//....
setContentView(R.layout.main_layout);
//.....
myScoreView = (TextView) findViewById(R.id.PlayerTotalScore);
myScoreView.setText(Integer.toString(PlayerTotal));
new updatePlayerScore().execute(1,2); //parameters for calculation
}
private class updatePlayerScore extends AsyncTask<Integer, Integer, Integer> {
@Override
protected TextView doInBackground(Integer... params) {
int score = params[0] + 2 * params[1];
return score;
}
@Override
protected void onProgressUpdate(Integer... values) {
//if you want to provide some indication in the UI that calculation
//is happening, like moving a progress bar, that's what you'd do here.
}
@Override
protected void onPostExecute(Integer scoreCalculationResult) {
myScoreView.setText(Integer.toString(scoreCalculationResult));
}
}
Редактировать: Если вы не хотите выполнять логику вычислений в doInBackgroundThread, вы, вероятно, просто хотите использовать:
runOnUiThread(new Runnable(){
@Override
public void run(){
myScoreView.setText(PlayerScoreValue);
}
});
Или:
myScoreView.post(new Runnable(){
@Override
public void run(){
myScoreView.setText(PlayerScoreValue);
}
});