在我的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()时,更新ALLWAYS可以正常工作。
我有一个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会返回旧指针值?
Spitballing: 这就好像从初始onCreate开始的View的第一个实例(即使它的资源)一样,即使在旋转设备时实例化了一个新的View之后也是如此。也许LocationListener这样做是因为我还没有停止它。但每次旋转设备时停止并启动它似乎都很愚蠢!
答案 0 :(得分:1)
我猜测locationListener是一个Activity的匿名内部类,这意味着它包含对其父类的引用。所以现在如果在onCreate()调用之后这个locationListener 不重新创建,它将引用旧的Activity,并且对findViewById()的调用将返回该旧Activity所持有的对象。这不仅会导致程序执行错误,还会导致内存泄漏(基本上所有由原始Activity创建的内容都将被保留)。
如果以上不是原因,那么我需要有关locationListener的更多信息以及如何使用它来提供帮助。