Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何永久引用视图?(安卓)_Android_Android View - Fatal编程技术网

Android 如何永久引用视图?(安卓)

Android 如何永久引用视图?(安卓),android,android-view,Android,Android View,我有一个xml布局 在我的活动中,在onCreate方法中,我获得了一个要定期更新的视图的引用,如下所示: TextView myText=(TextView)findViewById(R.id.textview1) 然后,在周期法中,我会这样做: myText.setText(Float.toString(myData)) 它工作正常,直到屏幕旋转 我读到,当屏幕旋转时,布局被重新创建,布局上的所有视图都被重新创建,因此旧的引用不起作用 我的代码: private TextView myTex

我有一个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
}
我怎样才能永久引用视图? 我怎么知道屏幕什么时候旋转了


Thanx

如果你想要一份永久性的推荐信,你可能会想得有点不正确。当手机旋转时(假设您允许旋转),该视图将从存储器中删除

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

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


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


您是否在您的
onPause()中注销传感器侦听器
?我想您一定是在破坏视图和调用onCreate()之间收到了传感器事件。(您可以尝试设置一些断点以查看是否发生这种情况。)

看看应该怎么做

否则,该代码应该可以工作。(我在代码中这样做,没关系——在创建新视图后,应该重新分配您的成员。)


您不必担心onConfigurationChanged(),Android文档鼓励您不要搞砸这件事。

您说“旧的引用不起作用”是什么意思?您是否得到异常?在上面的代码中,“myText”存储对TextView的引用。但是,当屏幕旋转时,该TextView将被销毁,而其他TextView将在新布局中替换它(在旋转时创建),因此myText现在引用一个不存在的TextView。但是在哪里设置
myText
成员变量?在示例代码中,您正在设置一个本地。你能给我们看更多的代码吗?我会用更多的代码编辑这个问题,对不起:PYes,sensorListener管理我认为我做得很好,使用onPause和onResume方法,问题只是对视图的引用,但我用onConfiguration Changed解决了它。你认为应该怎么做?我想学习如何正确地处理这件事,因为现在它是有效的,但是如果你认为应该用其他方式来处理,请告诉我:)当你自己处理这件事时,你完全阻止了观看娱乐。您隐藏了一个bug,但没有修复它。由于其他原因(例如内存不足的任务切换)重新启动应用程序时,仍可能发生此故障。文档中说自己处理OnConfiguration()已更改。