私の updateGUI() 関数では、各 TextView を次のように更新します。
((TextView) findViewById(R.id.lbTrackerLat)).setText(String.valueOf(lat));
((TextView) findViewById(R.id.lbTrackerLong)).setText(String.valueOf(lng));
((TextView) findViewById(R.id.lbTrackerAlt)).setText(String.valueOf(alt));
onCreate で onclick が割り当てられたボタンを押して updateGUI() を呼び出すと、更新は常に機能します。
ユーザーが別のボタンをクリックしたときに開始される locationListener があり、すべての更新イベントで updateGUI() も呼び出します。これは、画面が最初に回転するまで機能し、その後何らかの理由で画面が更新されません。
理由を突き止めようとしている間に、次のコードを updateGUI() 関数に追加しました。
TextView t = (TextView) findViewById(R.id.lbTrackerPostLastRefresh);
t.setText(formattedDate);
Log.d("H","EXIT lbTrackerPostLastRefresh="+t.toString());
回転後 (onCreate が再度呼び出されます)、ボタン クリックから呼び出されると、ポインターとして 44c76a78 が取得されます。locationListener 更新関数が findVIewByID を呼び出すと、ポインター 44c1b518 が返されます!!??
レイアウトが破棄されて再作成されたことがわかりましたが、findViewById が古いポインター値を返すのはなぜですか??
スピットボール: デバイスがローテーションされたときに新しいビューがインスタンス化された後でも、最初の onCreate で始まるビューの最初のインスタンスが (そのリソースと共に) 陽気に続くかのようです。停止していないため、LocationListener がこれを実行している可能性があります。しかし、デバイスが回転するたびに停止して開始するのはばかげているようです!