├── .gradle └── 2.8 │ └── taskArtifacts │ ├── cache.properties │ ├── cache.properties.lock │ ├── fileHashes.bin │ ├── fileSnapshots.bin │ ├── outputFileStates.bin │ └── taskArtifacts.bin ├── .idea ├── .name ├── compiler.xml ├── copyright │ └── profiles_settings.xml ├── gradle.xml ├── libraries │ ├── animated_vector_drawable_23_2_1.xml │ ├── appcompat_v7_23_2_1.xml │ ├── dagger_2_0.xml │ ├── javax_annotation_10_0_b28.xml │ ├── javax_inject_1.xml │ ├── mediarouter_v7_23_0_0.xml │ ├── play_services_8_4_0.xml │ ├── play_services_ads_8_4_0.xml │ ├── play_services_analytics_8_4_0.xml │ ├── play_services_appindexing_8_4_0.xml │ ├── play_services_appinvite_8_4_0.xml │ ├── play_services_appstate_8_4_0.xml │ ├── play_services_auth_8_4_0.xml │ ├── play_services_base_8_4_0.xml │ ├── play_services_basement_8_4_0.xml │ ├── play_services_cast_8_4_0.xml │ ├── play_services_drive_8_4_0.xml │ ├── play_services_fitness_8_4_0.xml │ ├── play_services_games_8_4_0.xml │ ├── play_services_gcm_8_4_0.xml │ ├── play_services_identity_8_4_0.xml │ ├── play_services_location_8_4_0.xml │ ├── play_services_maps_8_4_0.xml │ ├── play_services_measurement_8_4_0.xml │ ├── play_services_nearby_8_4_0.xml │ ├── play_services_panorama_8_4_0.xml │ ├── play_services_plus_8_4_0.xml │ ├── play_services_safetynet_8_4_0.xml │ ├── play_services_vision_8_4_0.xml │ ├── play_services_wallet_8_4_0.xml │ ├── play_services_wearable_8_4_0.xml │ ├── support_annotations_23_2_1.xml │ ├── support_v4_23_2_1.xml │ └── support_vector_drawable_23_2_1.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml ├── vcs.xml └── workspace.xml ├── Dagger2Sample.iml ├── README.md ├── app ├── .gitignore ├── app.iml ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── example │ │ └── niuxiaowei │ │ └── dagger2sample │ │ └── ApplicationTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── example │ │ │ └── niuxiaowei │ │ │ └── dagger2sample │ │ │ ├── App.java │ │ │ ├── MultiConstruct.java │ │ │ ├── Navigator.java │ │ │ ├── ToastUtil.java │ │ │ ├── data │ │ │ ├── GetUserData.java │ │ │ └── UserData.java │ │ │ ├── di │ │ │ ├── components │ │ │ │ ├── ActivityComponent.java │ │ │ │ ├── AppComponent.java │ │ │ │ ├── MainComponent.java │ │ │ │ └── MainFragmentComponent.java │ │ │ ├── modules │ │ │ │ ├── ActivityModule.java │ │ │ │ ├── AppModule.java │ │ │ │ └── MainModule.java │ │ │ └── scopes │ │ │ │ └── PerActivity.java │ │ │ ├── presenter │ │ │ └── MainPresenter.java │ │ │ └── view │ │ │ ├── BaseActivity.java │ │ │ ├── BaseFragment.java │ │ │ ├── MainActivity.java │ │ │ └── MainFragment.java │ └── res │ │ ├── layout │ │ ├── activity_main.xml │ │ └── fragment_main.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-w820dp │ │ └── dimens.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── com │ └── example │ └── niuxiaowei │ └── dagger2sample │ └── ExampleUnitTest.java ├── build.gradle ├── build └── intermediates │ └── dex-cache │ └── cache.xml ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── local.properties └── settings.gradle /.gradle/2.8/taskArtifacts/cache.properties: -------------------------------------------------------------------------------- 1 | #Sat Mar 19 12:18:06 CST 2016 2 | -------------------------------------------------------------------------------- /.gradle/2.8/taskArtifacts/cache.properties.lock: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxiaowei/Dagger2Sample/c7455662d46084141d84970496b900199f1efc8d/.gradle/2.8/taskArtifacts/cache.properties.lock -------------------------------------------------------------------------------- /.gradle/2.8/taskArtifacts/fileHashes.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxiaowei/Dagger2Sample/c7455662d46084141d84970496b900199f1efc8d/.gradle/2.8/taskArtifacts/fileHashes.bin -------------------------------------------------------------------------------- /.gradle/2.8/taskArtifacts/fileSnapshots.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxiaowei/Dagger2Sample/c7455662d46084141d84970496b900199f1efc8d/.gradle/2.8/taskArtifacts/fileSnapshots.bin -------------------------------------------------------------------------------- /.gradle/2.8/taskArtifacts/outputFileStates.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxiaowei/Dagger2Sample/c7455662d46084141d84970496b900199f1efc8d/.gradle/2.8/taskArtifacts/outputFileStates.bin -------------------------------------------------------------------------------- /.gradle/2.8/taskArtifacts/taskArtifacts.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxiaowei/Dagger2Sample/c7455662d46084141d84970496b900199f1efc8d/.gradle/2.8/taskArtifacts/taskArtifacts.bin -------------------------------------------------------------------------------- /.idea/.name: -------------------------------------------------------------------------------- 1 | Dagger2Sample -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /.idea/copyright/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 18 | 19 | -------------------------------------------------------------------------------- /.idea/libraries/animated_vector_drawable_23_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/libraries/appcompat_v7_23_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /.idea/libraries/dagger_2_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/javax_annotation_10_0_b28.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/javax_inject_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/mediarouter_v7_23_0_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_ads_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_analytics_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_appindexing_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_appinvite_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_appstate_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_auth_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_base_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_basement_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_cast_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_drive_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_fitness_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_games_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_gcm_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_identity_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_location_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_maps_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_measurement_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_nearby_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_panorama_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_plus_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_safetynet_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_vision_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_wallet_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/play_services_wearable_8_4_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/libraries/support_annotations_23_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/libraries/support_v4_23_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /.idea/libraries/support_vector_drawable_23_2_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | Android 12 | 13 | 14 | Android Lint 15 | 16 | 17 | Java 18 | 19 | 20 | Java language level migration aidsJava 21 | 22 | 23 | 24 | 25 | Android 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 47 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Dagger2Sample.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Dagger2Sample -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/app.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 9 | 10 | 11 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | //dagger 3 | apply plugin: 'com.neenbedankt.android-apt' 4 | 5 | android { 6 | compileSdkVersion 23 7 | buildToolsVersion "23.0.2" 8 | 9 | defaultConfig { 10 | applicationId "com.example.niuxiaowei.dagger2sample" 11 | minSdkVersion 15 12 | targetSdkVersion 23 13 | versionCode 1 14 | versionName "1.0" 15 | } 16 | buildTypes { 17 | release { 18 | minifyEnabled false 19 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 20 | } 21 | } 22 | } 23 | 24 | dependencies { 25 | compile fileTree(dir: 'libs', include: ['*.jar']) 26 | testCompile 'junit:junit:4.12' 27 | //dagger start 28 | apt 'com.google.dagger:dagger-compiler:2.0' 29 | //dagger end 30 | compile 'com.android.support:appcompat-v7:23.2.1' 31 | compile 'com.google.dagger:dagger:2.0' 32 | compile 'org.glassfish:javax.annotation:10.0-b28' 33 | compile 'com.android.support:support-v4:23.2.1' 34 | compile 'com.google.android.gms:play-services:8.4.0' 35 | } 36 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/niuxiaowei/Library/Android/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/src/androidTest/java/com/example/niuxiaowei/dagger2sample/ApplicationTest.java: -------------------------------------------------------------------------------- 1 | package com.example.niuxiaowei.dagger2sample; 2 | 3 | import android.app.Application; 4 | import android.test.ApplicationTestCase; 5 | 6 | /** 7 | * Testing Fundamentals 8 | */ 9 | public class ApplicationTest extends ApplicationTestCase { 10 | public ApplicationTest() { 11 | super(Application.class); 12 | } 13 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/niuxiaowei/dagger2sample/App.java: -------------------------------------------------------------------------------- 1 | package com.example.niuxiaowei.dagger2sample; 2 | 3 | import android.app.Application; 4 | 5 | import com.example.niuxiaowei.dagger2sample.di.components.AppComponent; 6 | import com.example.niuxiaowei.dagger2sample.di.components.DaggerAppComponent; 7 | import com.example.niuxiaowei.dagger2sample.di.modules.AppModule; 8 | 9 | /** 10 | * Created by niuxiaowei on 16/3/19. 11 | */ 12 | public class App extends Application { 13 | 14 | AppComponent mAppComponent; 15 | 16 | @Override 17 | public void onCreate() { 18 | super.onCreate(); 19 | 20 | mAppComponent = DaggerAppComponent.builder().appModule(new AppModule(this)).build(); 21 | 22 | } 23 | 24 | public AppComponent getAppComponent(){ 25 | return mAppComponent; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/niuxiaowei/dagger2sample/MultiConstruct.java: -------------------------------------------------------------------------------- 1 | package com.example.niuxiaowei.dagger2sample; 2 | 3 | import javax.inject.Inject; 4 | 5 | /** 6 | * 7 | * 该类用来测试多个构造函数同时用@Inject进行标注,看dagger2是否能正常工作 8 | * Created by niuxiaowei on 16/3/24. 9 | */ 10 | public class MultiConstruct { 11 | 12 | @Inject 13 | MultiConstruct(){ 14 | 15 | } 16 | // 17 | // @Inject 18 | // MultiConstruct(int a){ 19 | // 20 | // } 21 | // 22 | // @Inject 23 | // MultiConstruct(String s){ 24 | // 25 | // } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/niuxiaowei/dagger2sample/Navigator.java: -------------------------------------------------------------------------------- 1 | package com.example.niuxiaowei.dagger2sample; 2 | 3 | import javax.inject.Inject; 4 | import javax.inject.Singleton; 5 | 6 | /** 7 | * Created by niuxiaowei on 16/3/19. 8 | */ 9 | @Singleton 10 | public class Navigator { 11 | 12 | public Navigator(){ 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/niuxiaowei/dagger2sample/ToastUtil.java: -------------------------------------------------------------------------------- 1 | package com.example.niuxiaowei.dagger2sample; 2 | 3 | import android.content.Context; 4 | import android.widget.Toast; 5 | 6 | import javax.inject.Inject; 7 | 8 | /** 9 | * 管理toast的类,整个app用该类来显示toast 10 | * Created by niuxiaowei on 16/3/22. 11 | */ 12 | public class ToastUtil { 13 | 14 | private Context mContext; 15 | 16 | public ToastUtil(Context context){ 17 | this.mContext = context; 18 | } 19 | 20 | public void showToast(String message){ 21 | Toast.makeText(mContext,message,Toast.LENGTH_LONG).show(); 22 | } 23 | 24 | 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/niuxiaowei/dagger2sample/data/GetUserData.java: -------------------------------------------------------------------------------- 1 | package com.example.niuxiaowei.dagger2sample.data; 2 | 3 | import javax.inject.Inject; 4 | 5 | /** 6 | * Created by niuxiaowei on 16/3/20. 7 | */ 8 | public class GetUserData { 9 | 10 | @Inject 11 | public GetUserData(){ 12 | 13 | } 14 | 15 | public UserData getUser(){ 16 | UserData data = new UserData(); 17 | data.mUserName = "niu"; 18 | return data; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/niuxiaowei/dagger2sample/data/UserData.java: -------------------------------------------------------------------------------- 1 | package com.example.niuxiaowei.dagger2sample.data; 2 | 3 | /** 4 | * Created by niuxiaowei on 16/3/22. 5 | */ 6 | public class UserData { 7 | 8 | public String mUserName; 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/niuxiaowei/dagger2sample/di/components/ActivityComponent.java: -------------------------------------------------------------------------------- 1 | package com.example.niuxiaowei.dagger2sample.di.components; 2 | 3 | import android.app.Activity; 4 | 5 | import com.example.niuxiaowei.dagger2sample.di.modules.ActivityModule; 6 | import com.example.niuxiaowei.dagger2sample.di.scopes.PerActivity; 7 | import com.example.niuxiaowei.dagger2sample.view.BaseActivity; 8 | 9 | import dagger.Component; 10 | 11 | /** 12 | * 13 | * Created by niuxiaowei on 16/3/20. 14 | */ 15 | @PerActivity 16 | @Component(modules = {ActivityModule.class}) 17 | public interface ActivityComponent { 18 | 19 | Activity getActivity(); 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/niuxiaowei/dagger2sample/di/components/AppComponent.java: -------------------------------------------------------------------------------- 1 | package com.example.niuxiaowei.dagger2sample.di.components; 2 | 3 | import android.content.Context; 4 | 5 | import dagger.Component; 6 | 7 | import com.example.niuxiaowei.dagger2sample.Navigator; 8 | import com.example.niuxiaowei.dagger2sample.ToastUtil; 9 | import com.example.niuxiaowei.dagger2sample.di.modules.AppModule; 10 | 11 | import javax.inject.Singleton; 12 | 13 | /** 14 | * Created by niuxiaowei on 16/3/19. 15 | */ 16 | @Singleton 17 | @Component(modules={AppModule.class}) 18 | public interface AppComponent { 19 | 20 | Context getContext(); 21 | 22 | Navigator getNavigator(); 23 | ToastUtil getToastUtil(); 24 | // Test test(); 25 | 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/niuxiaowei/dagger2sample/di/components/MainComponent.java: -------------------------------------------------------------------------------- 1 | package com.example.niuxiaowei.dagger2sample.di.components; 2 | 3 | import com.example.niuxiaowei.dagger2sample.di.modules.ActivityModule; 4 | import com.example.niuxiaowei.dagger2sample.di.modules.MainModule; 5 | import com.example.niuxiaowei.dagger2sample.di.scopes.PerActivity; 6 | import com.example.niuxiaowei.dagger2sample.view.MainActivity; 7 | 8 | import dagger.Component; 9 | 10 | /** 11 | * MainComponent继承了ActivityComponent,假如ActivityComponent中定义了创建类实例方法,则MainComponent中必须提供@Inject或@Provides对应的 12 | * 初始化类实例的方法 13 | * Created by niuxiaowei on 16/3/20. 14 | */ 15 | @PerActivity 16 | @Component(dependencies = AppComponent.class,modules = {MainModule.class, ActivityModule.class}) 17 | public interface MainComponent extends ActivityComponent{ 18 | //对MainActivity进行依赖注入 19 | void inject(MainActivity mainActivity); 20 | 21 | 22 | MainFragmentComponent mainFragmentComponent(); 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/niuxiaowei/dagger2sample/di/components/MainFragmentComponent.java: -------------------------------------------------------------------------------- 1 | package com.example.niuxiaowei.dagger2sample.di.components; 2 | 3 | import com.example.niuxiaowei.dagger2sample.di.scopes.PerActivity; 4 | import com.example.niuxiaowei.dagger2sample.view.MainFragment; 5 | 6 | import dagger.Subcomponent; 7 | 8 | /** 9 | * Created by niuxiaowei on 16/3/20. 10 | */ 11 | @PerActivity 12 | @Subcomponent 13 | public interface MainFragmentComponent { 14 | 15 | 16 | void inject(MainFragment mainFragment); 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/niuxiaowei/dagger2sample/di/modules/ActivityModule.java: -------------------------------------------------------------------------------- 1 | package com.example.niuxiaowei.dagger2sample.di.modules; 2 | 3 | import android.app.Activity; 4 | 5 | import com.example.niuxiaowei.dagger2sample.di.scopes.PerActivity; 6 | 7 | 8 | import dagger.Module; 9 | import dagger.Provides; 10 | 11 | /** 12 | * 提供baseactivity的module 13 | * Created by niuxiaowei on 16/3/20. 14 | */ 15 | @Module 16 | public class ActivityModule { 17 | 18 | private final Activity activity; 19 | public ActivityModule(Activity activity){ 20 | this.activity = activity; 21 | } 22 | 23 | @Provides @PerActivity 24 | public Activity provideActivity(){ 25 | return activity; 26 | } 27 | 28 | 29 | 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/niuxiaowei/dagger2sample/di/modules/AppModule.java: -------------------------------------------------------------------------------- 1 | package com.example.niuxiaowei.dagger2sample.di.modules; 2 | 3 | import android.content.Context; 4 | 5 | import com.example.niuxiaowei.dagger2sample.Navigator; 6 | import com.example.niuxiaowei.dagger2sample.ToastUtil; 7 | 8 | import javax.inject.Singleton; 9 | 10 | import dagger.Module; 11 | import dagger.Provides; 12 | 13 | /** 14 | * Created by niuxiaowei on 16/3/19. 15 | */ 16 | @Module 17 | public class AppModule { 18 | 19 | Context context; 20 | 21 | public AppModule(Context context){ 22 | this.context = context; 23 | } 24 | 25 | @Provides @Singleton 26 | public Context provideContext(){ 27 | return context; 28 | } 29 | 30 | @Provides @Singleton 31 | public Navigator provideNavigator(){ 32 | return new Navigator(); 33 | } 34 | 35 | @Provides @Singleton 36 | public ToastUtil provideToastUtil(){ 37 | return new ToastUtil(context); 38 | } 39 | 40 | // @Provides @Singleton 41 | // public Test provideTest(){ 42 | // return new Test(); 43 | // } 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/niuxiaowei/dagger2sample/di/modules/MainModule.java: -------------------------------------------------------------------------------- 1 | package com.example.niuxiaowei.dagger2sample.di.modules; 2 | 3 | import com.example.niuxiaowei.dagger2sample.data.GetUserData; 4 | 5 | import dagger.Module; 6 | import dagger.Provides; 7 | 8 | /** 9 | * Created by niuxiaowei on 16/3/20. 10 | */ 11 | @Module 12 | public class MainModule { 13 | 14 | @Provides 15 | public GetUserData provideUserData(){ 16 | return new GetUserData(); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/niuxiaowei/dagger2sample/di/scopes/PerActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.niuxiaowei.dagger2sample.di.scopes; 2 | 3 | import java.lang.annotation.Retention; 4 | import java.lang.annotation.RetentionPolicy; 5 | 6 | import javax.inject.Scope; 7 | 8 | /** 9 | * Created by niuxiaowei on 16/3/22. 10 | */ 11 | @Scope 12 | @Retention(RetentionPolicy.RUNTIME) 13 | public @interface PerActivity { 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/niuxiaowei/dagger2sample/presenter/MainPresenter.java: -------------------------------------------------------------------------------- 1 | package com.example.niuxiaowei.dagger2sample.presenter; 2 | 3 | import com.example.niuxiaowei.dagger2sample.data.GetUserData; 4 | import com.example.niuxiaowei.dagger2sample.data.UserData; 5 | 6 | import javax.inject.Inject; 7 | 8 | /** 9 | * Created by niuxiaowei on 16/3/20. 10 | */ 11 | public class MainPresenter { 12 | 13 | public GetUserData mUserData; 14 | private IUserView mUserView; 15 | 16 | 17 | 18 | @Inject 19 | public MainPresenter(GetUserData userData){ 20 | this.mUserData = userData; 21 | } 22 | 23 | public void getUser(){ 24 | UserData userData = this.mUserData.getUser(); 25 | this.mUserView.setUserName(userData.mUserName); 26 | } 27 | public void setUserView(IUserView userView){ 28 | this.mUserView = userView; 29 | } 30 | 31 | public static interface IUserView{ 32 | void setUserName(String name); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/niuxiaowei/dagger2sample/view/BaseActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.niuxiaowei.dagger2sample.view; 2 | 3 | import android.os.Bundle; 4 | import android.os.PersistableBundle; 5 | import android.support.v7.app.AppCompatActivity; 6 | 7 | import com.example.niuxiaowei.dagger2sample.App; 8 | import com.example.niuxiaowei.dagger2sample.di.components.AppComponent; 9 | import com.example.niuxiaowei.dagger2sample.di.components.DaggerActivityComponent; 10 | import com.example.niuxiaowei.dagger2sample.di.modules.ActivityModule; 11 | 12 | /** 13 | * Created by niuxiaowei on 16/3/20. 14 | */ 15 | public class BaseActivity extends AppCompatActivity { 16 | 17 | public AppComponent getAppComponent(){ 18 | return ((App)getApplication()).getAppComponent(); 19 | } 20 | 21 | @Override 22 | public void onCreate(Bundle savedInstanceState) { 23 | super.onCreate(savedInstanceState); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/niuxiaowei/dagger2sample/view/BaseFragment.java: -------------------------------------------------------------------------------- 1 | package com.example.niuxiaowei.dagger2sample.view; 2 | 3 | import android.app.Fragment; 4 | 5 | /** 6 | * Created by niuxiaowei on 16/3/22. 7 | */ 8 | public class BaseFragment extends Fragment{ 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/niuxiaowei/dagger2sample/view/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.niuxiaowei.dagger2sample.view; 2 | 3 | import android.net.Uri; 4 | import android.support.v7.app.AppCompatActivity; 5 | import android.os.Bundle; 6 | 7 | import com.example.niuxiaowei.dagger2sample.R; 8 | import com.example.niuxiaowei.dagger2sample.di.components.DaggerMainComponent; 9 | import com.example.niuxiaowei.dagger2sample.di.components.MainComponent; 10 | import com.example.niuxiaowei.dagger2sample.di.modules.ActivityModule; 11 | import com.example.niuxiaowei.dagger2sample.di.modules.MainModule; 12 | 13 | public class MainActivity extends BaseActivity implements MainFragment.OnFragmentInteractionListener{ 14 | 15 | private MainComponent mMainComponent; 16 | 17 | @Override 18 | public void onCreate(Bundle savedInstanceState) { 19 | super.onCreate(savedInstanceState); 20 | setContentView(R.layout.activity_main); 21 | 22 | mMainComponent = DaggerMainComponent.builder().appComponent(getAppComponent()) 23 | .mainModule(new MainModule()) 24 | .activityModule(new ActivityModule(this)).build(); 25 | mMainComponent.inject(this); 26 | } 27 | 28 | public MainComponent getMainComponent(){ 29 | return mMainComponent; 30 | } 31 | 32 | @Override 33 | public void onFragmentInteraction(Uri uri) { 34 | 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/niuxiaowei/dagger2sample/view/MainFragment.java: -------------------------------------------------------------------------------- 1 | package com.example.niuxiaowei.dagger2sample.view; 2 | 3 | import android.content.Context; 4 | import android.net.Uri; 5 | import android.os.Bundle; 6 | import android.support.v4.app.Fragment; 7 | import android.view.LayoutInflater; 8 | import android.view.View; 9 | import android.view.ViewGroup; 10 | import android.widget.TextView; 11 | 12 | import com.example.niuxiaowei.dagger2sample.MultiConstruct; 13 | import com.example.niuxiaowei.dagger2sample.R; 14 | import com.example.niuxiaowei.dagger2sample.ToastUtil; 15 | import com.example.niuxiaowei.dagger2sample.di.components.MainFragmentComponent; 16 | import com.example.niuxiaowei.dagger2sample.presenter.MainPresenter; 17 | 18 | import javax.inject.Inject; 19 | 20 | public class MainFragment extends BaseFragment implements MainPresenter.IUserView{ 21 | // TODO: Rename parameter arguments, choose names that match 22 | 23 | @Inject 24 | MainPresenter mainPresenter; 25 | @Inject 26 | ToastUtil toastUtil; 27 | 28 | @Inject 29 | MultiConstruct multiConstruct; 30 | 31 | private MainFragmentComponent mainFragmentComponent; 32 | 33 | private OnFragmentInteractionListener mListener; 34 | 35 | public MainFragment(){ 36 | 37 | } 38 | 39 | /** 40 | * Use this factory method to create a new instance of 41 | * this fragment using the provided parameters. 42 | * 43 | * @param param1 Parameter 1. 44 | * @param param2 Parameter 2. 45 | * @return A new instance of fragment MainFragment. 46 | */ 47 | // TODO: Rename and change types and number of parameters 48 | public static MainFragment newInstance(String param1, String param2) { 49 | MainFragment fragment = new MainFragment(); 50 | Bundle args = new Bundle(); 51 | 52 | return fragment; 53 | } 54 | 55 | @Override 56 | public void onCreate(Bundle savedInstanceState) { 57 | super.onCreate(savedInstanceState); 58 | } 59 | 60 | @Override 61 | public void onActivityCreated(Bundle savedInstanceState) { 62 | super.onActivityCreated(savedInstanceState); 63 | if(getActivity() instanceof MainActivity){ 64 | mainFragmentComponent = ((MainActivity)getActivity() ).getMainComponent().mainFragmentComponent(); 65 | mainFragmentComponent.inject(this); 66 | mainPresenter.setUserView(this); 67 | } 68 | } 69 | 70 | @Override 71 | public View onCreateView(LayoutInflater inflater, ViewGroup container, 72 | Bundle savedInstanceState) { 73 | // Inflate the layout for this fragment 74 | View view = inflater.inflate(R.layout.fragment_main, container, false); 75 | 76 | view.findViewById(R.id.get_user).setOnClickListener(new View.OnClickListener() { 77 | @Override 78 | public void onClick(View v) { 79 | 80 | mainPresenter.getUser(); 81 | } 82 | }); 83 | view.findViewById(R.id.show_toast).setOnClickListener(new View.OnClickListener() { 84 | @Override 85 | public void onClick(View v) { 86 | toastUtil.showToast("依赖注入获取到的toast"); 87 | } 88 | }); 89 | 90 | return view; 91 | } 92 | 93 | 94 | 95 | // TODO: Rename method, update argument and hook method into UI event 96 | public void onButtonPressed(Uri uri) { 97 | if (mListener != null) { 98 | mListener.onFragmentInteraction(uri); 99 | } 100 | } 101 | 102 | @Override 103 | public void onAttach(Context context) { 104 | super.onAttach(context); 105 | if (context instanceof OnFragmentInteractionListener) { 106 | mListener = (OnFragmentInteractionListener) context; 107 | } else { 108 | throw new RuntimeException(context.toString() 109 | + " must implement OnFragmentInteractionListener"); 110 | } 111 | 112 | 113 | 114 | } 115 | 116 | @Override 117 | public void onDetach() { 118 | super.onDetach(); 119 | mListener = null; 120 | } 121 | 122 | @Override 123 | public void setUserName(String name) { 124 | ((TextView)getView().findViewById(R.id.user_info)).setText(name); 125 | } 126 | 127 | /** 128 | * This interface must be implemented by activities that contain this 129 | * fragment to allow an interaction in this fragment to be communicated 130 | * to the activity and potentially other fragments contained in that 131 | * activity. 132 | *

133 | * See the Android Training lesson Communicating with Other Fragments for more information. 136 | */ 137 | public interface OnFragmentInteractionListener { 138 | // TODO: Update argument type and name 139 | void onFragmentInteraction(Uri uri); 140 | } 141 | 142 | } 143 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_main.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 11 | 12 |