我在xml中有一个布局。
在我的活动中,在onCreate方法中,我获得了对我想要定期更新的视图的引用,如下所示:
TextView myText =(TextView)findViewById(R.id.textview1);
然后,在定期方法中,我这样做:
myText.setText(Float.toString(MYDATA的));
工作正常,直到屏幕旋转。
我读到当屏幕旋转时,会重新创建布局,并且会重新创建布局上的所有视图,因此旧引用不起作用。
我的代码:
private TextView myText; //Its a class member
public void onCreate(Bundle savedInstanceState) {
//Other things
myText = (TextView)findViewById(R.id.textview1);
//Other things
}
//This is the periodic method, it occurs many times per second
public final void onSensorChanged(SensorEvent event) {
myText.setText(Float.toString(event.myData));
//This setText works fine until the screen rotation
}
我如何永久引用该视图? 我怎么知道屏幕何时旋转?
感谢名单
答案 0 :(得分:1)
如果您想要永久性参考,您可能会认为有些不正确。旋转手机时,视图将从内存中删除(假设您允许旋转。)
在旋转点,您需要获得指向新创建的对象的指针。
要检测与布局相关的方向更改,请使用onConfigurationChanged,如本文所示。
答案 1 :(得分:1)
您是否在onPause()
取消注册传感器监听器?我认为你必须在破坏视图和调用onCreate()之间获取传感器事件。 (您可以尝试设置一些断点以查看是否发生这种情况。)
请查看the code on this page应该如何完成。
否则,该代码应该有效。 (我在我的代码中执行此操作并且没问题 - 在创建新视图后应重新分配您的成员。)
你不必担心onConfigurationChanged(),Android文档鼓励你不要乱用它。
答案 2 :(得分:0)
只需使用onCreate()中初始化的实例变量即可。如果你懒得执行findViewById(),你可以使用我的小注入库: