Gridview v7 对旧 api android.support.v7.widget.Gridlayout 的支持未能实例化

Posted

技术标签:

【中文标题】Gridview v7 对旧 api android.support.v7.widget.Gridlayout 的支持未能实例化【英文标题】:Gridview v7 support for older api android.support.v7.widget.Gridlayout failed to instaniate 【发布时间】:2013-04-04 22:41:42 【问题描述】:

我一直在尝试使用 v7 支持库在我的 android 项目中使用网格布局。我已经看到很多人遇到了与我相同的问题,但他们的所有修复都对我不起作用。我已经更新了java。我已经更新了最新的支持库。我已将支持包添加到构建路径。我尝试将 gridview 拖到视图上并允许 eclipse 导入包。这些工作都不是。我继续得到android.support.v7.widget.GridLayout 无法实例化。我什至创建了一个测试项目并从支持网格布局和相同的错误开始。有人有其他想法吗?以下是我寻求帮助的一些地方:

Eclipse giving an error of android.support.v7.widget.GridLayout failed to instantiate

IntelliJ and android.support.v7.widget.GridLayout

Eclipse and Android SL GridLayout not working together - "android.support.v7.widget.GridLayout could not be instantiated"

除此之外……

这是我的 activity_main.xml:

 <?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.GridLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_
    android:layout_
    app:alignmentMode="alignBounds"
    app:columnCount="6"
    app:columnOrderPreserved="false"
    app:useDefaultMargins="true" >

    <EditText
        android:id="@+id/total"
        app:layout_column="0"
        app:layout_columnSpan="6"
        app:layout_gravity="left"
        app:layout_row="0"
        android:clickable="false"
        android:ems="10"
        android:inputType="none|number"
        android:textAlignment="textEnd"
        android: >

        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/Button8"
        app:layout_column="1"
        app:layout_row="1"
        android:background="@drawable/button_light_grey"
        android:minHeight="40dip"
        android:minWidth="40dip"
        android:onClick="numberButtonEventHandler"
        android:text="8" />

    <Button
        android:id="@+id/Button9"
        app:layout_column="2"
        app:layout_row="1"
        android:background="@drawable/button_light_grey"
        android:minHeight="40dip"
        android:minWidth="40dip"
        android:onClick="numberButtonEventHandler"
        android:text="9" />

    <Button
        android:id="@+id/Button4"
        app:layout_column="0"
        app:layout_row="2"
        android:background="@drawable/button_light_grey"
        android:minHeight="40dip"
        android:minWidth="40dip"
        android:onClick="numberButtonEventHandler"
        android:text="4" />

    <Button
        android:id="@+id/Button5"
        app:layout_column="1"
        app:layout_row="2"
        android:background="@drawable/button_light_grey"
        android:minHeight="40dip"
        android:minWidth="40dip"
        android:onClick="numberButtonEventHandler"
        android:text="5" />

    <Button
        android:id="@+id/Button6"
        app:layout_column="2"
        app:layout_row="2"
        android:background="@drawable/button_light_grey"
        android:minHeight="40dip"
        android:minWidth="40dip"
        android:onClick="numberButtonEventHandler"
        android:text="6" />

    <Button
        android:id="@+id/ButtonMultiply"
        app:layout_column="3"
        app:layout_row="2"
        android:background="@drawable/custom_button"
        android:minHeight="40dip"
        android:minWidth="40dip"
        android:onClick="Multiply"
        android:text="*"
        android:textColor="@color/light_grey" />

    <Button
        android:id="@+id/Button1"
        app:layout_column="0"
        app:layout_row="3"
        android:background="@drawable/button_light_grey"
        android:minHeight="40dip"
        android:minWidth="40dip"
        android:onClick="numberButtonEventHandler"
        android:text="1" />

    <Button
        android:id="@+id/Button2"
        app:layout_column="1"
        app:layout_row="3"
        android:background="@drawable/button_light_grey"
        android:minHeight="40dip"
        android:minWidth="40dip"
        android:onClick="numberButtonEventHandler"
        android:text="2" />

    <Button
        android:id="@+id/Button3"
        app:layout_column="2"
        app:layout_row="3"
        android:background="@drawable/button_light_grey"
        android:minHeight="40dip"
        android:minWidth="40dip"
        android:onClick="numberButtonEventHandler"
        android:text="3" />

    <Button
        android:id="@+id/ButtonMinus"
        app:layout_column="3"
        app:layout_row="3"

        android:background="@drawable/custom_button"
        android:minHeight="40dip"
        android:minWidth="40dip"
        android:onClick="Subtract"
        android:text="-"
        android:textColor="@color/light_grey" />

    <Button
        android:id="@+id/ButtonDivide"
        app:layout_column="3"
        app:layout_gravity="right"
        app:layout_row="1"
        app:layout_rowSpan="2"
        android:background="@drawable/custom_button"
        android:minHeight="40dip"
        android:minWidth="40dip"
        android:onClick="Divide"
        android:text="/"
        android:textColor="@color/light_grey" />

    <Button
        android:id="@+id/button0"
        app:layout_column="0"
        app:layout_columnSpan="2"
        app:layout_row="4"
        android:background="@drawable/button_light_grey"
        android:minHeight="20dp"
        android:minWidth="82dp"
        android:onClick="numberButtonEventHandler"
        android:text="0" />

    <Button
        android:id="@+id/buttonPoint"
        app:layout_column="2"
        app:layout_row="4"
        android:background="@drawable/button_light_grey"
        android:minHeight="20dip"
        android:minWidth="40dp"
        android:onClick="numberButtonEventHandler"
        android:text="."
        android: />

    <Button
        android:id="@+id/ButtonPlus"
        app:layout_column="3"
        app:layout_row="4"
        android:background="@drawable/custom_button"
        android:minHeight="40dip"
        android:minWidth="40dip"
        android:onClick="Add"
        android:text="+"
        android:textColor="@color/light_grey" />

    <Button
        android:id="@+id/ButtonEqueals"
        app:layout_column="4"
        app:layout_row="3"
        app:layout_rowSpan="2"
        android:background="@drawable/custom_button"
        android:
        android:minHeight="82dp"
        android:minWidth="20dp"
        android:onClick="Equeals"
        android:text="="
        android:textColor="@color/light_grey"
        android: />

    <Button
        android:id="@+id/Button7"
        app:layout_column="0"
        app:layout_row="1"
        android:background="@drawable/button_light_grey"
        android:minHeight="40dip"
        android:minWidth="40dip"
        android:onClick="numberButtonEventHandler"
        android:text="7" />



</android.support.v7.widget.GridLayout>

这是项目树的片段,显示了所有指向 v7 gridlayout 的引用库、依赖项和库:新编辑,要求删除一个引用。

这是我得到的确切例外:

java.lang.ClassNotFoundException: android.support.v7.gridlayout.R$dimen
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    at android.support.v7.widget.GridLayout.<init>(GridLayout.java:255)
    at android.support.v7.widget.GridLayout.<init>(GridLayout.java:274)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
    at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.instantiateClass(ProjectCallback.java:422)
    at com.android.ide.eclipse.adt.internal.editors.layout.ProjectCallback.loadView(ProjectCallback.java:179)
    at android.view.BridgeInflater.loadCustomView(BridgeInflater.java:207)
    at android.view.BridgeInflater.createViewFromTag(BridgeInflater.java:135)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:466)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:372)
    at com.android.layoutlib.bridge.impl.RenderSessionImpl.inflate(RenderSessionImpl.java:385)
    at com.android.layoutlib.bridge.Bridge.createSession(Bridge.java:332)
    at com.android.ide.common.rendering.LayoutLibrary.createSession(LayoutLibrary.java:325)
    at com.android.ide.eclipse.adt.internal.editors.layout.gle2.RenderService.createRenderSession(RenderService.java:440)
    at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.renderWithBridge(GraphicalEditorPart.java:1545)
    at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.recomputeLayout(GraphicalEditorPart.java:1302)
    at com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart.activated(GraphicalEditorPart.java:1059)
    at com.android.ide.eclipse.adt.internal.editors.layout.LayoutEditorDelegate.delegatePageChange(LayoutEditorDelegate.java:686)
    at com.android.ide.eclipse.adt.internal.editors.common.CommonXmlEditor.pageChange(CommonXmlEditor.java:360)
    at org.eclipse.ui.part.MultiPageEditorPart$2.widgetSelected(MultiPageEditorPart.java:292)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:248)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1077)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1062)
    at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:774)
    at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:3028)
    at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:1749)
    at org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.java:278)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4169)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3758)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1053)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:942)
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:86)
    at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:588)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:543)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    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:353)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:180)
    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:601)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:629)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:584)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1438)

【问题讨论】:

没人有什么想法吗? 您似乎从两个不同的位置导入了 v7 库。尝试删除引用库中的那个。 @RaghavSood 我按照您的要求从构建路径中删除了其中一个引用,但我仍然遇到同样的错误。我现在已经发布了我从 eclipse 收到的确切错误。 【参考方案1】:

我遇到了同样的问题,我通过将“.../android-sdks/extras/android/support/v7/gridlayout”作为“Existing Android Code Into WorkSpace”导入来修复它。

它的项目名称是“android.support.v7.widget.GridLayout”,它是一个库。然后你应该在 Project/Properties/Android/Library 面板中“添加...”它作为一个库。然后它应该工作。 希望这对您有所帮助。

下面是我的xml:

<ScrollView
    xmlns:grid="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:paddingBottom="10dp" >

    <android.support.v7.widget.GridLayout
        android:id="@+id/gridlayout_home"
        android:layout_
        android:layout_
        android:layout_margin="5dp"
        android:paddingBottom="5dp"
        grid:columnCount="4"
        grid:rowCount="4" >
    </android.support.v7.widget.GridLayout>
</ScrollView>

【讨论】:

我在这里缺少.widget 部分,意味着我导入了错误的项目? 这不是解决方案。 GridLayout 和 GridView 是用于完全不同事物的不同组件。【参考方案2】:

M也用这个,我用这个就像

看到这个,我已经添加了一个gridlayout,它被添加到我生成的文件中,但在你的情况下,不要在生成的文件中添加gridview,这就是你面临这个问题的原因,制作构建路径或者如果你说我会发送你是我的gridview布局,但是当我在设计文件中添加gridview然后它会自动下载并自动添加refrence时它是自动生成的,所以你再次从设计文件中添加gridview,并且gridlayout也在你生成的文件中,链接你的项目与gridviewlayout V7...

【讨论】:

如果在生成的文件夹中,不应该是自己生成的吗?我无法在那里复制 v7 网格布局,因为当我清理项目时它会被删除。 不,如果你在配置构建路径中给出路径,那么清理后它不会被删除 在Linux中查看我的代码后,我发现生成的代码中实际上有support.v7.gridview。在 Windows 中这仍然不起作用,但我认为这是 eclipse 的问题。【参考方案3】:

好的,我以一种奇怪的方式解决了这个问题。另外,如果有人能给我一个解释,我会给他们赏金!我开始玩 Virtual Box,非常喜欢新的 Fedora 18。决定双启动创建一个 android 开发环境。下载了结合了 Eclipse 包的 adt。我在 Windows 中创建了一个 50GB 的分区来在操作系统之间共享文件并在那里复制我的项目。引导到 Fedora 并开始一个新的 android 项目。将我的 Windows 项目中的所有文件复制并粘贴到这个新项目中,然后.... Presto!开箱即用。无需修改构建路径或其他任何内容。我收到一个警告:[2013-04-10 07:27:45 - gridlayout_v7] WARNING: unable to write jarlist cache file /home/craig/workspace/gridlayout_v7/bin/jarlist.cache 但该项目在我的 avd 中运行没有问题。那怎么办?为什么在windows下不行,在linux下不行?

【讨论】:

【参考方案4】:

尝试删除 app:useDefaultMargins="true" 或将其设为 false。

【讨论】:

【参考方案5】:

我通过将 android-support-v7-gridlayout.jar 库设置为在 gridlayout_V7 项目中导出来解决了这个问题。

【讨论】:

这不是解决方案。 GridLayout 和 GridView 是用于完全不同事物的不同组件。【参考方案6】:

我也遇到了同样的问题,通过将“android-support-v7-gridlayout.jar”引用添加到项目库文件夹来解决。

从路径: (安卓安装)\sdk\extras\android\support\v7\gridlayout\libs

到路径: (工作区路径)(应用程序名称)\libs

【讨论】:

这不是解决方案。 GridLayout 和 GridView 是用于完全不同事物的不同组件。

以上是关于Gridview v7 对旧 api android.support.v7.widget.Gridlayout 的支持未能实例化的主要内容,如果未能解决你的问题,请参考以下文章

Android GridView 特殊属性

GridView

GridView

GridView练习题

RecyclerView+BaseRecyclerViewAdapterHelper的基本使用

带文字的GridView2Activity