【问题标题】:addContentView within onSensorChanged genertes erroronSensorChanged 中的 addContentView 会产生错误
【发布时间】:2023-03-03 23:09:01
【问题描述】:

我有 MyCompassView 类扩展视图并绘制指南针,SurfaceHolder 活动在表面支架上打开相机,最后,MainActivity 应该被上述类覆盖。我使用的方式在MainActivity上覆盖SurfaceHolder活动如下

myCameraSurfaceHolder = new SurfaceHolderActivity(this); setContentView(myCameraSurfaceHolder); 找到了,相机在表面支架上工作正常。

问题是当我尝试用MyCompassView 的视图覆盖MainActivity 的表面时。为了实现这一点,我使用了:

loiViewInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); loiViewInflater = LayoutInflater.from(getApplicationContext()); compassOverLayView = loiViewInflater.inflate(R.layout.activity_viewactivity, null); addContentView(compassOverLayView,new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));

addContentView(....) 放置在传感器侦听器的onSensorChanged 内,因为每次从传感器读取数据时,我都想根据方位角值绘制具有不同指针方向的指南针。并且 logcat 抱怨并生成以下消息。请帮我纠正错误。

Logcat_OutPut:

04-26 04:07:21.295: E/AndroidRuntime(26921): FATAL EXCEPTION: main
04-26 04:07:21.295: E/AndroidRuntime(26921): java.lang.IllegalStateException: The  
specified child already has a parent. You must call removeView() on the child's parent  
first.
04-26 04:07:21.295: E/AndroidRuntime(26921):    at  
android.view.ViewGroup.addViewInner(ViewGroup.java:3739)
04-26 04:07:21.295: E/AndroidRuntime(26921):    at  
android.view.ViewGroup.addView(ViewGroup.java:3610)
04-26 04:07:21.295: E/AndroidRuntime(26921):    at  
android.view.ViewGroup.addView(ViewGroup.java:3586)
04-26 04:07:21.295: E/AndroidRuntime(26921):    at   
com.android.internal.policy.impl.PhoneWindow.addContentView(PhoneWindow.java:392)
04-26 04:07:21.295: E/AndroidRuntime(26921):    at   
android.app.Activity.addContentView(Activity.java:2004)
04-26 04:07:21.295: E/AndroidRuntime(26921):    at  

android.support.v7.app.ActionBarActivity.superAddContentView(ActionBarActivity.java:228)

【问题讨论】:

    标签: java android surfaceview android-sensors surfaceholder


    【解决方案1】:

    正如错误日志所说:“The specified child already has a parent. You must call removeView() on the child's parent first”。

    该错误是指compassOverLayView 已添加到父视图中,无法再次添加。

    这不是一个很好的刷新 UI 元素的方法,addContentView 不应该被重复调用。

    如果您创建了一个自定义视图来显示您的指南针,请尝试向其添加刷新方法,然后调用它。

    【讨论】:

      猜你喜欢
      • 2020-12-30
      • 1970-01-01
      • 2011-12-10
      • 2014-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      相关资源
      最近更新 更多