我怎样才能永久引用视图? (机器人)

时间:2012-01-21 16:43:02

标签: android android-view

我在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
}

我如何永久引用该视图? 我怎么知道屏幕何时旋转?

感谢名单

3 个答案:

答案 0 :(得分:1)

如果您想要永久性参考,您可能会认为有些不正确。旋转手机时,视图将从内存中删除(假设您允许旋转。)

在旋转点,您需要获得指向新创建的对象的指针。

要检测与布局相关的方向更改,请使用onConfigurationChanged,如本文所示。

How to detect orientation change in layout in Android?

答案 1 :(得分:1)

您是否在onPause()取消注册传感器监听器?我认为你必须在破坏视图和调用onCreate()之间获取传感器事件。 (您可以尝试设置一些断点以查看是否发生这种情况。)

请查看the code on this page应该如何完成。

否则,该代码应该有效。 (我在我的代码中执行此操作并且没问题 - 在创建新视图后应重新分配您的成员。)

你不必担心onConfigurationChanged(),Android文档鼓励你不要乱用它。

答案 2 :(得分:0)

只需使用onCreate()中初始化的实例变量即可。如果你懒得执行findViewById(),你可以使用我的小注入库:

https://github.com/ko5tik/andject