【问题标题】:TabLayout with ViewPager leading to app crash带有 ViewPager 的 TabLayout 导致应用程序崩溃
【发布时间】:2017-07-26 05:02:33
【问题描述】:

我想为 android 应用程序制作一个 GUI,其中我有 TabLayout 用于单独的片段。到目前为止,我的 MainActivity.java 和 activity_main.xml 看起来像这样:

MainActivity.java:

package com.example.cortana.testing.activity;

import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;

import java.util.ArrayList;
import java.util.List;

import com.example.cortana.testing.R;


import com.example.cortana.testing.fragments.Fragment_A;
import com.example.cortana.testing.fragments.Fragment_B;




public class MainActivity extends AppCompatActivity {

    private Toolbar toolbar;
    private TabLayout tabLayout;
    private ViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

        tabLayout = (TabLayout) findViewById(R.id.tabs);
        tabLayout.setupWithViewPager(viewPager);
    }

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new Fragment_A(), "A");
        adapter.addFragment(new Fragment_B(), "B");
        viewPager.setAdapter(adapter);
    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" >
        </android.support.v7.widget.Toolbar>

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabMode="fixed"
            app:tabGravity="fill" >
        </android.support.design.widget.TabLayout>

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"  >
    </android.support.v4.view.ViewPager>

</android.support.design.widget.CoordinatorLayout>

其他内容(片段及其布局)已正确设置。现在,问题是当我使用 MainActivity.java 的 line 44 上的函数 tabLayout.setupWithViewPager(viewPager); 包含带有 viewPager 的 tablayout 时,应用程序崩溃了。应用程序不会崩溃并按预期运行(栏上没有选项卡,但存在片段)。 应用崩溃报告在这里:

06-23 11:23:05.949 21271-21271/com.example.cortana.testing E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.cortana.testing, PID: 21271
java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v7/internal/widget/TintManager;
at android.support.design.widget.TabLayout$TabView.<init>(TabLayout.java:1145)
at android.support.design.widget.TabLayout.createTabView(TabLayout.java:635)
at android.support.design.widget.TabLayout.addTabView(TabLayout.java:669)
at android.support.design.widget.TabLayout.addTab(TabLayout.java:365)
at android.support.design.widget.TabLayout.addTab(TabLayout.java:340)
at android.support.design.widget.TabLayout.setTabsFromPagerAdapter(TabLayout.java:624)
at android.support.design.widget.TabLayout.setupWithViewPager(TabLayout.java:595)
at com.example.cortana.testing.activity.MainActivity$override.onCreate(MainActivity.java:44)
at com.example.cortana.testing.activity.MainActivity$override.access$dispatch(MainActivity.java)
at com.example.cortana.testing.activity.MainActivity.onCreate(MainActivity.java:0)
at android.app.Activity.performCreate(Activity.java:6220)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1112)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2513)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2646)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4324)
at android.app.ActivityThread.access$900(ActivityThread.java:182)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1494)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5763)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)                                                                               Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v7.internal.widget.TintManager" on path: DexPathList[[dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-support-annotations-23.4.0_bb0868973057e0c4594582a2b34966b1571b4498-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_7-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_6-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_5-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_4-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_3-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_2-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_1-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_0-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-internal_impl-23.4.0_0380fc8cb59e96244f130184574ead0ab4fa81a6-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-com.android.support-support-vector-drawable-23.4.0_222d58f6b3309dd767eaedd78b101df07bb0214b-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-com.android.support-support-v4-23.4.0_d9254cdfbfc7a83fc69750e7bacf0c28659d5fbe-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-com.android.support-design-23.0.1_e104774034c64e7848d1f2ca9937e0b0ba73cbda-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-com.android.support-appcompat-v7-23.4.0_9c2b828fb5b4db0ad04d9c69d99c765617e6767c-classes.dex", dex 
    06-23 11:23:05.950 21271-21271/com.example.cortana.testing D/Error: ERR: exClass=java.lang.ClassNotFoundException
    06-23 11:23:05.950 21271-21271/com.example.cortana.testing D/Error: ERR: exMsg=Didn't find class "android.support.v7.internal.widget.TintManager" on path: DexPathList[[dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-support-annotations-23.4.0_bb0868973057e0c4594582a2b34966b1571b4498-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_7-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_6-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_5-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_4-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_3-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_2-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_1-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_0-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-internal_impl-23.4.0_0380fc8cb59e96244f130184574ead0ab4fa81a6-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-com.android.support-support-vector-drawable-23.4.0_222d58f6b3309dd767eaedd78b101df07bb0214b-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-com.android.support-support-v4-23.4.0_d9254cdfbfc7a83fc69750e7bacf0c28659d5fbe-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-com.android.support-design-23.0.1_e104774034c64e7848d1f2ca9937e0b0ba73cbda-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-com.android.support-appcompat-v7-23.4.0_9c2b828fb5b4db0ad04d9c69d99c765617e6767c-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-com.android.support-animated-vector-drawable-23.4.0_295f5bae1ae17fe25c8f6037cf5499452801adbf-classes.dex"],nativeLibraryDirectories=[/vendor/lib64, /system/lib64, /vendor/lib64, /system/lib64]]
    06-23 11:23:05.950 21271-21271/com.example.cortana.testing D/Error: ERR: file=BaseDexClassLoader.java
    06-23 11:23:05.950 21271-21271/com.example.cortana.testing D/Error: ERR: class=dalvik.system.BaseDexClassLoader
    06-23 11:23:05.950 21271-21271/com.example.cortana.testing D/Error: ERR: method=findClass line=56
    06-23 11:23:05.951 21271-21271/com.example.cortana.testing D/Error: ERR: stack=java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/v7/internal/widget/TintManager;
at android.support.design.widget.TabLayout$TabView.<init>(TabLayout.java:1145)
at android.support.design.widget.TabLayout.createTabView(TabLayout.java:635)
at android.support.design.widget.TabLayout.addTabView(TabLayout.java:669)
at android.support.design.widget.TabLayout.addTab(TabLayout.java:365)
at android.support.design.widget.TabLayout.addTab(TabLayout.java:340)
at android.support.design.widget.TabLayout.setTabsFromPagerAdapter(TabLayout.java:624)
at android.support.design.widget.TabLayout.setupWithViewPager(TabLayout.java:595)
at com.example.cortana.testing.activity.MainActivity$override.onCreate(MainActivity.java:44)
at com.example.cortana.testing.activity.MainActivity$override.access$dispatch(MainActivity.java)
at com.example.cortana.testing.activity.MainActivity.onCreate(MainActivity.java:0)
at android.app.Activity.performCreate(Activity.java:6220)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1112)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2513)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2646)
at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:4324)
at android.app.ActivityThread.access$900(ActivityThread.java:182)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1494)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5763)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v7.internal.widget.TintManager" on path: DexPathList[[dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-support-annotations-23.4.0_bb0868973057e0c4594582a2b34966b1571b4498-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_9-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_8-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_7-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_6-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_5-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_4-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_3-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_2-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_1-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-slice_0-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-internal_impl-23.4.0_0380fc8cb59e96244f130184574ead0ab4fa81a6-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-com.android.support-support-vector-drawable-23.4.0_222d58f6b3309dd767eaedd78b101df07bb0214b-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-com.android.support-support-v4-23.4.0_d9254cdfbfc7a83fc69750e7bacf0c28659d5fbe-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-com.android.support-design-23.0.1_e104774034c64e7848d1f2ca9937e0b0ba73cbda-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/slice-com.android.support-appcompat-v7-23.4.0_9c2b828fb5b4db0ad04d9c69d99c765617e6767c-classes.dex", dex file "/data/data/com.example.cortana.testing/files/instant-run/dex/sl
06-23 11:23:05.951 21271-21271/com.example.cortana.testing D/Error: ERR: TOTAL BYTES WRITTEN: 21616
06-23 11:23:07.877 21271-21271/com.example.cortana.testing I/Process: Sending signal. PID: 21271 SIG: 9

我不知道为什么会这样。我应该怎么做才能解决它?还请包括这次崩溃的原因。

编辑:我已将库 compile com.android.support:design:23.1.1' 包含在 build.gradle 中,但它仍然给出完全相同的错误。我已经清理了项目,然后重建了它。 build.gradle 看起来像这样:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.example.cortana.testing"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:design:23.1.1'
}

编辑 2:

我安装了相同版本的库,但仍然无法使用。有人可以提出一些其他的想法。 正如我之前所说,让所有事情都崩溃的函数是tablayout.setupWithViewPager(viewPager);。如果我将其注释掉,该应用程序就可以正常工作。

【问题讨论】:

  • 哇,感谢您的快速回答
  • 尝试先清理你的项目,然后运行。如果仍然无法正常工作,请尝试更新您的设计支持库。请注意,有时 android studio 中的“即时运行”功能会出现不正确的行为并导致您的项目无法正常工作。
  • 我已将设计类包含在清单中,但它仍然因相同的错误而崩溃。 android studio 中的 clean 项目按钮又在哪里:|
  • 在菜单构建中,选择清理项目

标签: java android android-fragments


【解决方案1】:

这是因为类加载器找不到类android.support.v7.internal.widget.TintManager。

您可能需要将此添加到您的 build.gradle:

compile 'com.android.support:appcompat-v7:24.0.0'
compile 'com.android.support:design:24.0.0'

顺便说一句,您不应该混合支持库的版本。我看到您编辑了您的帖子以包括:

compile 'com.android.support:appcompat-v7:23.4.0'
compile 'com.android.support:design:23.1.1'

不要这样做(混合 23.4.0 和 23.1.1)。使用 23.4.0 或 23.1.1。最好使用最新的(目前是 24.0.0),因为它解决了很多错误。

之后不要忘记执行“刷新所有 gradle 项目”。

PS:哦,是的,@arya-stark,请远离猎犬 ;-)

【讨论】:

  • 我觉得猎犬和我很冷。然后我知道如何“用尖头粘住它们”:)
  • @aryastark 我看到了你的更新,你不应该混合支持库的版本。另请参阅我的更新答案。
  • 我试过这样做,但没有帮助。请查看更新
  • @aryastark 你有没有“刷新所有 gradle 项目”(见我更新的答案)?
  • 不,我没有那样做。谢谢,那行得通。猜猜成绩由于某种原因没有更新。
【解决方案2】:

支持库和设计库的版本应该一致。

喜欢

   compile 'com.android.support:appcompat-v7:23.1.0'
    compile 'com.android.support:design:23.1.0'

或者试试看..

android {
 ........ 
    repositories {
        maven { url 'http://repo1.maven.org/maven2' }
    }
 ..........
    }

我希望它有效...

【讨论】:

  • 是的,我第一次得到它并尝试过。没用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-21
  • 2016-06-04
  • 2011-08-24
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多