Невозможно создать экземпляр CollapsingToolbarLayout

#android #android-layout

#Android #android-макет

Вопрос:

Я хочу реализовать CollapsingToolbarLayout в моем приложении (я хочу, чтобы это было похоже на эффект параллакса в Play Store)

Я видел много вопросов на самом StackOverflow, а также на сайте разработчика Android.

Проблема в том, что я всегда получаю сообщение об ошибке в IDE (Android Studio)

The following classes could not be instantiated:
- android.support.design.widget.CollapsingToolbarLayout

Если я все равно выполню это действие на своем телефоне, приложение выйдет из строя с ошибкой

 Caused by: java.lang.NoSuchMethodError: No static method setLayoutDirection(Landroid/graphics/drawable/Drawable;I)V in class Landroid/support/v4/graphics/drawable/DrawableCompat; or its super classes (declaration of 'android.support.v4.graphics.drawable.DrawableCompat' appears in /data/data/com.hemal.eventhub2/files/instant-run/dex/slice-com.android.support-support-v4-24.0.0_b8d850cc5f06d621d9211f2cbc20e32dfc36ae82-classes.dex)
                                                                       at android.support.design.widget.CollapsingToolbarLayout.setStatusBarScrim(CollapsingToolbarLayout.java:663)
 

Я почти уверен, что это как-то связано с конфликтующими импортами или зависимостями.

Сценарий gradle моего модуля приложения выглядит следующим образом

 apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.hemal.eventhub2"
        minSdkVersion 19
        targetSdkVersion 21
        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.2.1'
    compile 'com.android.volley:volley:1.0.0'
    compile 'com.android.support:design:23.2.1'
    compile 'com.google.android.gms:play-services-auth:9.6.1'
    compile 'com.google.firebase:firebase-core:9.6.1'
    compile 'com.google.firebase:firebase-messaging:9.6.1'
}

apply plugin: 'com.google.gms.google-services'
 

Ниже приведены некоторые из импорта в MainAcitivity моего приложения

 import android.support.design.widget.NavigationView;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.GravityCompat;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
 

Являются ли вышеупомянутые импорта или зависимости конфликтующими, которые вызывают проблемы.
Я также обновил свою Android Studio до 2.2.1 с 1.5.1, надеясь, что это может решить проблему

Не могли бы вы, пожалуйста, указать мне, какие SDK, импорт и зависимости я должен удалить, сохранить или загрузить, чтобы заставить CollapsingToolbarLayout работать.

Комментарии:

1. Ваш целевой SDK равен 21. Ваш минимальный SDK равен 19. Но, тем не менее, вы скомпилировали библиотеки для SDK 23. Затем ошибка относится к com.android.support-support-v4-24.0.0 (SDK 24). Итак, да, вероятно, проблема с зависимостями, но трудно определить, какая из них вам нужна.

2. И эта проблема была опубликована здесь. code.google.com/p/android/issues/detail?id=211108

3. Итак, у меня установлены SDK для API 19, 21,23, и я установил свой minSdk равным 19 при создании проекта, а цель — 21. Должен ли я изменить целевую или минимальную версию SDK или начать новый проект с нуля и добавить к нему исходные файлы, надеясь, что это может сработать? Сейчас я потратил на это около 4 часов.

4. Вам действительно нужен только SDK для compileSdkVersion установленного. Согласно той проблеме, которую я опубликовал, обновление Android Studio, похоже, нарушило ее. Вы можете попробовать отключить мгновенный запуск, но я не уверен, исправит ли это.