【发布时间】:2012-04-14 07:46:42
【问题描述】:
在我的 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 这样做是因为我没有停止它。但是每次旋转设备时停止和启动它似乎很愚蠢!
【问题讨论】:
-
你不能使用 t.getText();,尝试清理项目并重新运行?
-
为什么 id 更改对您很重要? findViewById() 是否返回不同的控件?
-
@hotveryspicy 我正在尝试写入 TextView 的标签。
-
@rekire ID 保持不变。指向 TextView 控件的指针发生了变化。
-
为了初始化你的 locationManager,你是使用你的 Activity 上下文还是你的 Application 上下文?尝试并始终使用您的应用程序上下文。试试这个改变,告诉我它是否有效。如果是,那我会提供解释。
标签: android application-lifecycle