2010-08-15 49 views
1

我正在使用基于RelativeLayout的自定义类,但它显然不会在Eclipse布局编辑器中呈现。如何使用androids LayoutInflater.Factory创建自定义视图类而不是内置类?

我发现这篇文章关于LayoutInflater.Factory,它听起来像我需要做的,但我找不到使用LayoutInflater.Factory的指南。

http://www.macadamian.com/blog/post/android_-_custom_classes_from_xml_layout/

谁能有什么,我做的这个地方帮助?我理解这篇文章中所说的内容,但需要具体说明在哪里申报,钩住什么工厂。

如果它是有帮助的,下面是当我尝试查看版式视图main.xml中输出的完整的控制台..

java.lang.ClassCastException: android.view.View cannot be cast to android.view.ViewGroup 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:619) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) 
at android.view.LayoutInflater.rInflate(LayoutInflater.java:621) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:407) 
at android.view.LayoutInflater.inflate(LayoutInflater.java:296) 
at com.android.layoutlib.bridge.Bridge.computeLayout(Bridge.java:396) 
at com.android.ide.eclipse.adt.internal.editors.layout.gle1.GraphicalLayoutEditor.computeLayout(Unknown Source) 
at com.android.ide.eclipse.adt.internal.editors.layout.gle1.GraphicalLayoutEditor.recomputeLayout(Unknown Source) 
at com.android.ide.eclipse.adt.internal.editors.layout.gle1.GraphicalLayoutEditor.activated(Unknown Source) 
at com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditor.pageChange(Unknown Source) 
at org.eclipse.ui.part.MultiPageEditorPart.setActivePage(MultiPageEditorPart.java:1076) 
at org.eclipse.ui.forms.editor.FormEditor.setActivePage(FormEditor.java:601) 
at com.android.ide.eclipse.adt.internal.editors.AndroidEditor.selectDefaultPage(Unknown Source) 
at com.android.ide.eclipse.adt.internal.editors.AndroidEditor.addPages(Unknown Source) 
at org.eclipse.ui.forms.editor.FormEditor.createPages(FormEditor.java:138) 
at org.eclipse.ui.part.MultiPageEditorPart.createPartControl(MultiPageEditorPart.java:357) 
at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:662) 
at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:462) 
at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) 
at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:313) 
at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:180) 
at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:270) 
at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65) 
at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:473) 
at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1256) 
at org.eclipse.ui.internal.PartStack.setSelection(PartStack.java:1209) 
at org.eclipse.ui.internal.PartStack.presentationSelectionChanged(PartStack.java:843) 
at org.eclipse.ui.internal.PartStack.access$1(PartStack.java:829) 
at org.eclipse.ui.internal.PartStack$1.selectPart(PartStack.java:139) 
at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation$1.handleEvent(TabbedStackPresentation.java:133) 
at org.eclipse.ui.internal.presentations.util.AbstractTabFolder.fireEvent(AbstractTabFolder.java:270) 
at org.eclipse.ui.internal.presentations.util.AbstractTabFolder.fireEvent(AbstractTabFolder.java:279) 
at org.eclipse.ui.internal.presentations.defaultpresentation.DefaultTabFolder.access$1(DefaultTabFolder.java:1) 
at org.eclipse.ui.internal.presentations.defaultpresentation.DefaultTabFolder$2.handleEvent(DefaultTabFolder.java:87) 
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1176) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1200) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1185) 
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1025) 
at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:3256) 
at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:2045) 
at org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.java:323) 
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) 
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1176) 
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3493) 
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3112) 
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405) 
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369) 
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221) 
at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) 
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) 
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) 
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) 
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113) 
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194) 
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) 
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) 
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368) 
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:616) 
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559) 
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:514) 
at org.eclipse.equinox.launcher.Main.run(Main.java:1311) 

回答

2

LayoutInflater.Factory是不是你想要的。 Eclipse编辑器完全能够显示自定义视图,您应该检查错误日志以防发生错误。

+0

然而,文章提到了我的问题,它由于View和ViewGroup之间的转换错误而无法绘制对象。由于我的自定义RelativeLayout只是简单地有一些额外的onClick事件处理,所以我不知道如何解决这个问题。 – Zulaxia 2010-08-16 06:39:18

+0

啊。这是因为我要求ViewGroup实现来自View而不是ViewGroup的onClickListener? – Zulaxia 2010-08-16 07:02:26

0

发现问题。这不是一个铸造这个对象的问题,而是它内部的另一个ViewGroup,它被视为代码中的View。

相关问题