2016-06-23 5 views
0

Я хочу создать графический интерфейс для приложения Android, где у меня есть TabLayout для отдельных фрагментов. Uptil теперь мой MainActivity.java и activity_main.xml выглядеть следующим образом:TabLayout с ViewPager, приводящим к сбою приложения

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> 

Другие вещи (фрагменты и их макеты) были правильно настроены. Теперь проблема заключается в том, что когда я включаю tablayout с viewPager, используя funtion tabLayout.setupWithViewPager(viewPager);, присутствующий на line 44 MainActivity.java, приложение выходит из строя. Приложение не разбивается и работает как ожидалось (без вкладок на панели, но присутствуют фрагменты). Отчет краш-приложение здесь:

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' 
} 

EDIT 2:

Я установил ту же версию библиотеки, и он по-прежнему не будут работать. Может кто-нибудь предложить другие идеи. Как я уже говорил, функция, которая отключает все, составляет tablayout.setupWithViewPager(viewPager);. Если я прокомментирую это, приложение прекрасно работает.

+1

http://stackoverflow.com/questions/34046525/didnt-find-class-android-support-v7-internal-widget-tintmanager-on-path-dexp –

+0

Ого, спасибо за быстрый ответ –

+0

Попробуйте очистить ваш проект сначала, а затем запустите. Если все еще не работает, попробуйте обновить библиотеку поддержки дизайна. Имейте в виду, что иногда функция «Мгновенный запуск» в студии android будет вести себя беспристрастно и сделать ваш проект неработающим. –

ответ

0

Это происходит потому, что загрузчик классов не может найти класс 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 в данный момент), поскольку он решает множество ошибок.

Не забудьте после этого «Обновить все проекты градиента». enter image description here

PS: ой да, @ арйа-Старка, пожалуйста, держаться подальше от Собаке ;-)

+0

Я думаю, что собака и я озноб. И тогда я знаю, как «приклеить их с заостренным концом» :) –

+0

Вы идете девушка :-D – Niels

+0

@aryastark Я видел ваше обновление, вы не должны смешивать версии библиотеки поддержки. См. Также мой обновленный ответ. – Niels

0

версии библиотеки поддержки и библиотеки дизайна должны быть одинаковыми.

Как

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' } 
    } 
.......... 
    } 

Я надеюсь, что это работает ...

+0

Да, я получил его в первый раз и попробовал. Не помогает. –

Смежные вопросы