Уча се как да използвам asyncTask и имам проблем с опита да покажа TextView в реално време. MainActivity има няколко бутона, които ще стартират нова дейност плюс TextView, който показва стойността, която се променя на всеки 200 милисекунди. Но проблемът е, че TextView не се показва, докато не щракна върху бутона, за да започна друга дейност, и стойността не се променя, когато натисна "бутона за връщане", за да се върна към mainActivity. Той обаче променя стойността, когато натисна бутона, за да започна друга дейност.
private TextView t;
private int counter;
private boolean isUiVisible = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
t = (TextView) findViewById(R.id.counter);
counter = 0;
}
@Override
public void onStart(){
super.onStart();
isUiVisible = true;
new UpdateUi().execute();
}
@Override
public void onPause(){
super.onPause();
isUiVisible = false;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
private class UpdateUi extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
while (true) {
if (isUiVisible) {
counter++;
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
} else {
// Ensure the asynkTask ends when the activity ends
break;
}
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
t.setText(counter + "");
}
}
public void callRed(View view){
Intent intent = new Intent(this, RedActivity.class);
startActivity(intent);
}
public void callYellow(View view){
Intent intent = new Intent(this, YellowActivity.class);
startActivity(intent);
}
Опитах setText в onProgressUpdate, но не показа нищо. Също така потърсих, за да видя дали други имат проблеми, но изглежда, че имат същия проблем като моя (единият беше onClickListener, което не беше това, което търсех).
onResume()
вместо да правите наonStart()
. Докато новата дейност не скрие напълно старата, onStart() може да не се извика@Override public void onResume(){ super.onResume(); isUiVisible = true; new UpdateUi().execute(); }
- person Shobhit Puri   schedule 13.07.2013