Я работаю с Android 2.3.3. У меня возникла проблема с обновлением вида активности после поворота экрана.Обновить активность после поворота экрана
В моей деятельности есть переменная (счетчик), TextView (отображает значение счетчика), кнопку (увеличение счетчика и ее отображение) и TimerTask (увеличение счетчика и отображение его). Он работает правильно. Мой TextView показывает новое значение после каждого события из Button или TimerTask.
Работает, пока я не вращаю свой телефон. Событие TimerTask больше не обновляет мой TextView. Кнопка и экран поворота могут изменить мой вид. Мой TimerTask по-прежнему увеличивает мою переменную, но на экране нет изменений. Я проверил, TimerTask все еще выполняется и выполняется.
Это не мой настоящий проект, это просто та часть, где есть моя ошибка.
Моя единственная деятельность:
package com.test;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
public class TestRefreshActivity extends Activity {
static TimerTask mTimerTask=null;
static Timer t=new Timer();
final Handler handler = new Handler();
static int counter=0;
//-------------------------------------------------
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//create and run the timer
if(mTimerTask==null){
Log.d("Test","new TimerTask");
mTimerTask = new TimerTask() {
public void run() {
handler.post(new Runnable(){
public void run(){
counter++;
refreshCounter();
Log.d("TIMER", "TimerTask run");
}
});
}
};
t.schedule(mTimerTask, 500, 3000);
}
Log.d("Test","--onCreate--");
refreshCounter();
}
//-------------------------------------------------
@Override
public void onBackPressed() {
super.onBackPressed();
mTimerTask.cancel();
TestRefreshActivity.this.finish();
}
//-------------------------------------------------
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("Test","--onDestroy--");
}
//-------------------------------------------------
public void onBtnClick(View view){
counter++;
refreshCounter();
}
//-------------------------------------------------
//the only function which refreshes the TextView
private void refreshCounter(){
Runnable run = new Runnable(){
public void run(){
TextView textView = (TextView)findViewById(R.id.textView1);
textView.setText("counter="+counter);
textView.invalidate();
}
};
synchronized(run){
TestRefreshActivity.this.runOnUiThread(run);
}
}
}
И мой единственный вид:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onBtnClick"
android:text="Button" />
</LinearLayout>
Я не понимаю, почему мой TimerTask не может изменить вид после поворота. То, что я знаю, вращение разрушает мою деятельность для его воссоздания, но выживают только статические переменные.
Благодарим за помощь.
С уважением,
Одна вещь заключается в том, что вы не закончите работу в методе onBackPressed, потому что вы уже вызвали метод super.onBackPressed. Также остановите таймер в методе onDestoy. Если вы хотите, чтобы ваша переменная вернулась после ориентации, тогда пользователь onSavedInstance и метод onRestoreInstance – Dharmendra