简体   繁体   English

FlowingDrawer示例无法运行

[英]FlowingDrawer Sample does not run

I tried to run the sample of this library : https://github.com/mxn21/FlowingDrawer 我试图运行这个库的示例: https//github.com/mxn21/FlowingDrawer

it works fine with this outdated build.gradle : 它适用于这个过时的build.gradle:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "com.mt.stackoverflow"
        minSdkVersion 9
        targetSdkVersion 22
        versionCode 120
        versionName "1.2.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.android.support:recyclerview-v7:22.+'
    compile 'com.android.support:design:22.2.1'
    compile 'com.squareup.picasso:picasso:2.5.0'
    compile 'com.android.support:cardview-v7:22.+'
    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.mxn.soul:flowingdrawer-core:1.2.2'
}

but it fails with this updated build.gradle 但它失败了这个更新的build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.3"

    defaultConfig {
        applicationId "com.mt.stackoverflow"
        minSdkVersion 9
        targetSdkVersion 23
        versionCode 120
        versionName "1.2.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.3.0'
    compile 'com.android.support:recyclerview-v7:23.3.0'
    compile 'com.android.support:design:23.3.0'
    compile 'com.squareup.picasso:picasso:2.5.0'
    compile 'com.android.support:cardview-v7:23.3.0'
    compile 'com.nineoldandroids:library:2.4.0'
    compile 'com.mxn.soul:flowingdrawer-core:1.2.2'
}

FATAL EXCEPTION: main Process: com.mt.stackoverflow, PID: 31453 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mt.stackoverflow/com.mt.stackoverflow.MainActivity}: java.lang.IllegalArgumentException: Target must not be null. FATAL EXCEPTION:main进程:com.mt.stackoverflow,PID:31453 java.lang.RuntimeException:无法启动活动ComponentInfo {com.mt.stackoverflow / com.mt.stackoverflow.MainActivity}:java.lang.IllegalArgumentException:Target必须不是空的。 at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5422) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.IllegalArgumentException: Target must not be null. 在Android.app.A活动中的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416),android.app.A活动,活动(传统技术) $ H.handleMessage(ActivityThread.java:1344)位于android.app.AtoT.Thread.main的android.os.Handler.dispatchMessage(Handler.java:102)android.os.Looper.loop(Looper.java:148) ActivityThread.java:5422)位于com.android.internal.os的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726)的java.lang.reflect.Method.invoke(Native Method)。 ZygoteInit.main(ZygoteInit.java:616)引起:java.lang.IllegalArgumentException:Target不能为null。 at com.squareup.picasso.RequestCreator.into(RequestCreator.java:607) at com.squareup.picasso.RequestCreator.into(RequestCreator.java:590) at com.mt.stackoverflow.MyMenuFragment.setupHeader(MyMenuFragment.java:44) at com.mt.stackoverflow.MyMenuFragment.onCreateView(MyMenuFragment.java:31) at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:339) at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:602) at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1237) at android.app.Activity.performStart(Activity.java:6268 at com.squareup.picasso.RequestCreator.into(RequestCreator.java:607)at com.squareup.picasso.RequestCreator.into(RequestCreator.java:590)at com.mt.stackoverflow.MyMenuFragment.setupHeader(MyMenuFragment.java:44 )在android.support.v4.app.FragmentManagerImpl.moveToState的android.support.v4.app.Fragment.performCreateView(Fragment.java:1974)的com.mt.stackoverflow.MyMenuFragment.onCreateView(MyMenuFragment.java:31)处( FragmentManager.java:1067)android.support.v4上的android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252)android.support.v4上的android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742)位于android.support.v4.app.FragmentManager上的.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617)android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:602) )在Android.app.Activity.performStart的android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1237)上(Activity.java:6268) ) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) at android.app.ActivityThread.-wrap11(ActivityThread.java) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5422) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) )在android.app.A活动中的android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379)上的android.app.A活动时,我发现它位于Android.app.A活动中的android.app.ActivityThread.-wrap11(ActivityThread.java)上的android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)。 ActivityThread $ H.handleMessage(ActivityThread.java:1344)位于android.app.AooT.Thread.main的android.os.Handler.dispatchMessage(Handler.java:102)android.os.Looper.loop(Looper.java:148) (ActivityThread.java:5422)位于com.android.internal.os的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726)的java.lang.reflect.Method.invoke(Native Method) .ZygoteInit.main(ZygoteInit.java:616)

Any ideas how I can run the sample with the moste recent build.gradle dependencies ? 有关如何使用moste最近的build.gradle依赖项运行示例的任何想法?

The project is trying to access the ImageView in the header of the NavigationView in fragment_menu.xml in a way that is not compatible with the newer version of the support library. 该项目试图以与支持库的较新版本不兼容的方式访问fragment_menu.xmlNavigationView的标题中的ImageView You can find the details in this post . 您可以在这篇文章中找到详细信息。

The ImageView is used as the target in a Picasso call and since the ImageView can no longer be found it is null and that is the cause of the IllegalArgumentException: Target must not be null error. ImageViewPicasso调用中用作target ,并且由于无法再找到ImageView因此它是null,这是IllegalArgumentException: Target must not be null的原因IllegalArgumentException: Target must not be null错误。

To fix it open the class MyMenuFragment and replace onCreateView(...) with the following: 要修复它,请打开MyMenuFragment类,并使用以下内容替换onCreateView(...)

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_menu, container, false);

    View header = ((NavigationView) view.findViewById(R.id.vNavigation)).getHeaderView(0);
    ivMenuUserProfilePhoto = (ImageView) header.findViewById(R.id.ivMenuUserProfilePhoto);

    setupHeader();
    return setupReveal(view) ;
}

Basically you can no longer find ivMenuUserProfilePhoto directly from view . 基本上你不能再直接从view找到ivMenuUserProfilePhoto You first need to get the header view from the NavigationView and then find the ImageView using the header. 首先需要从NavigationView获取标题视图,然后使用标题查找ImageView

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM