如何将使用XML布局的视图动态添加到ContentView?

时间:2012-11-15 16:40:06

标签: android view android-framelayout

在我的主Activity中,我创建了一个带有子视图的FrameLayout并将其设置为ContentView。现在,在onCreate()完全执行后,保持在同一个Activity中,我需要能够动态地从FrameLayout添加和删除子视图。我通过使用Handler来暂停主线程,然后根据需要添加或删除子视图来实现这一点。

当我处理以编程方式创建的视图时,这一切都很有效,但是当我尝试使用使用XML布局的View执行相同操作时,我从ViewGroup中获取Null Pointer Exception,我试图添加到FrameLayout。

我是否可以使用特定步骤在不使用碎片的情况下实现此目的?

如果有些人不明白我的要求,我可以详细说明。我可以提供代码块,如果它会有所帮助,但我认为大多数人会从我的简短解释中得到我正在做的事情的要点。我只是想找人帮我指明正确的方向。

这是抛出异常taht的LogCat块:

11-15 13:40:42.977: E/AndroidRuntime(14956): FATAL EXCEPTION: main
11-15 13:40:42.977: E/AndroidRuntime(14956): java.lang.NullPointerException
11-15 13:40:42.977: E/AndroidRuntime(14956):    at android.view.ViewGroup.addView(ViewGroup.java:1821)
11-15 13:40:42.977: E/AndroidRuntime(14956):    at android.view.ViewGroup.addView(ViewGroup.java:1808)
11-15 13:40:42.977: E/AndroidRuntime(14956):    at com.beastcodes.framework.impl.AndroidGame.addScreenFragment(AndroidGame.java:207)
11-15 13:40:42.977: E/AndroidRuntime(14956):    at com.beastcodes.framework.impl.AndroidGame.addAllScreenFragments(AndroidGame.java:213)
11-15 13:40:42.977: E/AndroidRuntime(14956):    at com.beastcodes.framework.impl.AndroidGame.access$2(AndroidGame.java:211)
11-15 13:40:42.977: E/AndroidRuntime(14956):    at com.beastcodes.framework.impl.AndroidGame$3.run(AndroidGame.java:61)
11-15 13:40:42.977: E/AndroidRuntime(14956):    at android.os.Handler.handleCallback(Handler.java:587)
11-15 13:40:42.977: E/AndroidRuntime(14956):    at android.os.Handler.dispatchMessage(Handler.java:92)
11-15 13:40:42.977: E/AndroidRuntime(14956):    at android.os.Looper.loop(Looper.java:130)
11-15 13:40:42.977: E/AndroidRuntime(14956):    at android.app.ActivityThread.main(ActivityThread.java:3691)
11-15 13:40:42.977: E/AndroidRuntime(14956):    at java.lang.reflect.Method.invokeNative(Native Method)
11-15 13:40:42.977: E/AndroidRuntime(14956):    at java.lang.reflect.Method.invoke(Method.java:507)
11-15 13:40:42.977: E/AndroidRuntime(14956):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
11-15 13:40:42.977: E/AndroidRuntime(14956):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
11-15 13:40:42.977: E/AndroidRuntime(14956):    at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:1)

在将它们添加到FrameLayout之前,您必须使用LayoutInflater从XML中扩展视图。