错误如下:android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRoot.checkThread(ViewRoot.java:3020)
at android.view.ViewRoot.invalidateChild(ViewRoot.java:647)
at android.view.ViewRoot.invalidateChildInParent(ViewRoot.java:673)
at android.view.ViewGroup.invalidateChild(ViewGroup.java:2511)
at android.view.View.invalidate(View.java:5332)
at android.view.View.onFocusChanged(View.java:2793)
at android.view.View.clearFocusForRemoval(View.java:2706)
at android.view.ViewGroup.removeAllViewsInLayout(ViewGroup.java:2295)
at android.view.ViewGroup.removeAllViews(ViewGroup.java:2260)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207)at android.app.Activity.setContentView(Activity.java:1657)
at android.Lenged.Main.CGameNet.openUI_LoginID(CGameNet.java:27)
//之前SurfaceView在运行,然后调用openUI_LoginID函数,函数内通过
setContentView( R.layout.regid);切换VIEW但是这个时候就报错了请问是怎么导致的,应该怎么切换比较 好?

解决方案 »

  1.   

    “android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.”
    重点是这句
    Android UI操作只能在UI线程中操作
    猜测楼主把setContentView放在了非UI线程中
    建议使用Handler,在原setContentView位置替换为向handler发送message,在handler中setContentView