我使用 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 在旋转后无法更改视图。据我所知,旋转破坏了我重新创建它的活动,但只有静态变量才能存活。
谢谢你的帮助。
问候,