【问题标题】:Runtime Exception:Error inflating class android.support.v4.widget.DrawerLayout运行时异常:错误膨胀类 android.support.v4.widget.DrawerLayout
【发布时间】:2014-12-12 19:52:36
【问题描述】:

我在充气类 android.support.v4.widget.DrawerLayout 时遇到错误。我在下面的代码和相关屏幕截图中发布了详细说明。

堆栈跟踪:

11-04 07:35:04.404: E/AndroidRuntime(1427): FATAL EXCEPTION: main
11-04 07:35:04.404: E/AndroidRuntime(1427): Process: com.example.steve, PID: 1427
11-04 07:35:04.404: E/AndroidRuntime(1427): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.steve/com.example.steve.MainActivity}: android.view.InflateException: Binary XML file line #2: Error inflating class android.support.v4.widget.DrawerLayout
11-04 07:35:04.404: E/AndroidRuntime(1427):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at android.os.Handler.dispatchMessage(Handler.java:102)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at android.os.Looper.loop(Looper.java:136)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at android.app.ActivityThread.main(ActivityThread.java:5017)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at java.lang.reflect.Method.invokeNative(Native Method)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at java.lang.reflect.Method.invoke(Method.java:515)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at dalvik.system.NativeStart.main(Native Method)
11-04 07:35:04.404: E/AndroidRuntime(1427): Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class android.support.v4.widget.DrawerLayout
11-04 07:35:04.404: E/AndroidRuntime(1427):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:707)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at android.view.LayoutInflater.inflate(LayoutInflater.java:469)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at android.app.Activity.setContentView(Activity.java:1929)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at com.qrme.quranmadeeasy.ChapterActivity.onCreate(ChapterActivity.java:91)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at android.app.Activity.performCreate(Activity.java:5231)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
11-04 07:35:04.404: E/AndroidRuntime(1427):     ... 11 more
11-04 07:35:04.404: E/AndroidRuntime(1427): Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v4.widget.DrawerLayout" on path: DexPathList[[zip file "/data/app/com.qrme.quranmadeeasy-2.apk"],nativeLibraryDirectories=[/data/app-lib/com.qrme.quranmadeeasy-2, /system/lib]]
11-04 07:35:04.404: E/AndroidRuntime(1427):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at java.lang.ClassLoader.loadClass(ClassLoader.java:497)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at java.lang.ClassLoader.loadClass(ClassLoader.java:457)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at android.view.LayoutInflater.createView(LayoutInflater.java:559)
11-04 07:35:04.404: E/AndroidRuntime(1427):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:696)
11-04 07:35:04.404: E/AndroidRuntime(1427):     ... 20 more

ChapterActivity.java:

package com.example.steve;

import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.widget.DrawerLayout;

public class MainActivity extends Activity implements OnItemClickListener {

RelativeLayout relativelayoutContainer;
    TextView txtHeading;
    ListView listChapter;
    ListView listSlider;
    ImageView imgBanner;

@SuppressLint("NewApi")
    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
        setContentView(R.layout.activity_main); --->Error line no.91
        initialize();
     }
     private void initialize() {


    relativelayoutContainer = (RelativeLayout) findViewById(R.id.container);
    txtHeading = (TextView) findViewById(R.id.textviewHeading);
    listChapter = (ListView) findViewById(R.id.listviewChapters);
    imgBanner = (ImageView) findViewById(R.id.imageviewBanner);
    listSlider = (ListView) findViewById(R.id.list_slidermenu);

    // Setting font color and size
    Resources resources = ChapterActivity.this.getResources();
     }

    private void displayView(int position) {
        // update the main content by replacing fragments
        Fragment fragment = null;
        switch (position) {
        case 0:
            fragment = new HomeFragment();
            break;
        case 1:
            fragment = new FindPeopleFragment();
            break;
        case 2:
            fragment = new PhotosFragment();
            break;

        default:
            break;
        }

        if (fragment != null) {
            FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.beginTransaction()
                    .replace(R.id.frame_container, fragment).commit();

            // update selected item and title, then close the drawer
            mDrawerList.setItemChecked(position, true);
            mDrawerList.setSelection(position);
            setTitle(navMenuTitles[position]);
            mDrawerLayout.closeDrawer(mDrawerList);
        } else {
            // error in creating fragment
            Log.e("MainActivity", "Error in creating fragment");
        }
    }
  }

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
  <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

     <FrameLayout
        android:id="@+id/frame_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <RelativeLayout
        android:id="@+id/container"
        android:layout_width="match_parent"layout_width="wrap_content"
        android:layout_height="match_parent" >

        <TextView
            android:id="@+id/textviewHeading"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="5dp"
            android:fontFamily="fonts/Dosis.otf"
            android:text="@string/heading_chapter"
            android:textSize="25sp"
            android:visibility="gone" />

        <ListView
            android:id="@+id/listviewChapters"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_above="@+id/imageviewBanner"
            android:layout_below="@+id/textviewHeading"
            android:layout_marginTop="5dp" />
        </ListView>

        <ImageView
            android:id="@+id/imageviewBanner"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:src="@drawable/banner"
            android:visibility="invisible" />
    </RelativeLayout>


    <ListView
        android:id="@+id/list_slidermenu"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
    android:background="@color/list_background"
    android:choiceMode="singleChoice"
        android:divider="@color/list_divider"
        android:dividerHeight="1dp"        
        android:listSelector="@drawable/list_selector"
        android:background="@color/list_background"/>

    </android.support.v4.widget.DrawerLayout>

如果我点击 Graphical Layout 我会在下面看到这个异常:

Exception raised during rendering: com.android.layoutlib.bridge.MockView cannot be cast to android.view.ViewGroup
Exception details are logged in Window > Show View > Error Log
The following classes could not be instantiated:
- android.support.v4.widget.DrawerLayout (Open Class, Show Error Log)

然后在 Java 构建路径->

然后在Java Build path ->order and export

在上面的屏幕截图中,如果我 check android.support.v4.jar 我在控制台中收到以下 Multiple Dex 错误:

[2014-11-04 18:35:30 - Dex Loader] Unable to execute dex: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;
[2014-11-04 18:35:30 - main-android] Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl;

【问题讨论】:

  • 向我们展示您添加项目库的屏幕截图
  • @HarshParikh 在哪里添加项目库截图。我已经发布了很多截图
  • 问题,也许你已经在属性 ->android 中添加了一个项目作为库,它显示了你作为库附加的所有项目,并且在其中一个项目中,你添加了 v4 库。因此,它显示了多个 dex 文件问题

标签: android jar navigation-drawer executable-jar


【解决方案1】:

只需勾选 android 版本和支持 lib 复选框,即可解决您的问题。

【讨论】:

  • 谢谢兄弟 :)我猜在你的建议的帮助下发现了错误
  • 在哪里检查?
【解决方案2】:

如果我理解正确,您只需要在 ListView 中选择选项时直接调用新活动(并完全省去GalleryFragment)。比如:

private void displayView(int position) {
    if (position == 0) {
        Intent i = new Intent(getActivity(), GalleryActivity.class);
        startActivity(i);
        return
    }

    // ... same as before, for the other fragments

点击抽屉选项时不强制显示片段。

【讨论】:

    【解决方案3】:
    1.)If it is showing multiple dex file, then remove v4 library 
    
    2.)Show us which project you are adding as a library in this project and in that check the v4 library
    
    3.)Clean the project from Project -> clean and run the project
    

    【讨论】:

      【解决方案4】:

      用户@Dev 建议我如何使用抽屉布局以及这些错误发生在哪里。以便我能够解决这个问题。

      运行时异常:膨胀类 android.support.v4.widget.DrawerLayout 时出错

      • 由于抽屉的错误实现而发生此错误 布局。我将三个直接子级放置到抽屉布局错误 会发生。根据 DrawerLayout,它花了两个 直接孩子。

      • 在抽屉布局中,如果我放置两个直接布局解决了问题。 这就是为什么我在里面使用框架布局作为父布局 Drawer Layout 然后最后在 Frame Layout 之后添加一个 List View 来显示导航 抽屉。

      activity_main.xml:

      <?xml version="1.0" encoding="utf-8"?>
       <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:id="@+id/drawer_layout"
          android:layout_width="match_parent"
          android:layout_height="match_parent" >
      
          <FrameLayout
              android:id="@+id/frame_container"
              android:layout_width="match_parent"
              android:layout_height="match_parent" >
      
              <RelativeLayout
                  android:id="@+id/container"
                  android:layout_width="wrap_content"
                  android:layout_height="match_parent" >
      
                  <TextView
                      android:id="@+id/textviewHeading"
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:layout_alignParentTop="true"
                      android:layout_centerHorizontal="true"
                      android:layout_marginTop="5dp"
                      android:fontFamily="fonts/Dosis.otf"
                      android:text="@string/heading_chapter"
                      android:textSize="25sp"
                      android:visibility="gone" />
      
                  <ListView
                      android:id="@+id/listviewChapters"
                      android:layout_width="fill_parent"
                      android:layout_height="fill_parent"
                      android:layout_above="@+id/imageviewBanner"
                      android:layout_below="@+id/textviewHeading"
                      android:layout_marginTop="5dp" >
                  </ListView>
      
                  <ImageView
                      android:id="@+id/imageviewBanner"
                      android:layout_width="fill_parent"
                      android:layout_height="wrap_content"
                      android:layout_alignParentBottom="true"
                      android:layout_centerHorizontal="true"
                      android:src="@drawable/banner"
                      android:visibility="invisible" />
              </RelativeLayout>
          </FrameLayout>
      
          <ListView
              android:id="@+id/list_slidermenu"
              android:layout_width="240dp"
              android:layout_height="match_parent"
              android:layout_gravity="start"
              android:background="@color/list_background"
              android:choiceMode="singleChoice"
              android:divider="@color/list_divider"
              android:dividerHeight="1dp"
              android:listSelector="@drawable/list_selector" />
      
      </android.support.v4.widget.DrawerLayout>
      

      无法执行 dex:多个 dex 文件定义

      • 这些错误是由于 android-support-v4.jar.This jar 而发生的 我的项目中没有更新。它的大小接近 325 kb。所以我 实现从其他示例应用程序中检查 jar。在那里面 示例应用程序的 jar 大小为 530 kb。然后我找到它,qmr 项目 jar 是一个错误。它不是更新的 jar。所以我删除了 jar 放在 qmr 中并添加了示例项目 jar。然后它解决了我的 问题。

      • 如果我在其中放置一个 jar 会发生错误 目录(E:\Android Eclipse\Android\sdk\extras\android\support\v4)。这个目录是 适用于添加罐子。但不在我的项目中。

      • 因为 gson.jar、libgoogleanalytics.jar 等其他 jar 具有 E:\workspace\Workspace1\sample-android\libs.So 在我的项目中,在同一目录中添加一个 jar 来解决我的问题

      【讨论】:

        【解决方案5】:

        是的,我已经解决了你的问题 只是

        Right click on Project
        Build Path -> Configure Build Path
        add your external support v4 
        then check the support v4 from order and export
        
        Make sure your Android and Android Dependencies libraries are checked
        Clean & Build your Project
        

        我认为这会解决你的问题

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-06-02
          • 1970-01-01
          • 1970-01-01
          • 2016-09-29
          • 1970-01-01
          • 2016-12-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多