私はAndroid2.3.3を使用しています。画面を回転させた後、アクティビティのビューを更新するのに問題があります。
私のアクティビティには、変数(カウンター)、TextView(カウンター値を表示)、ボタン(カウンターを増やして表示)、TimerTask(カウンターを増やして表示)があります。正しく動作します。私のTextViewは、ButtonまたはTimerTaskからの各イベントの後に新しい値を表示します。
電話を回転させるまで機能します。TimerTaskのイベントが更新されなくなりました。ボタンと回転画面でビューを変更できます。私の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がビューを変更できない理由がわかりません。私が知っていることは、回転はそれを再作成するための私の活動を破壊しますが、静的変数だけが生き残ります。
ご協力いただきありがとうございます。
よろしく、