OnActivityResult
- Generates boilerplate code for OnActivityResult callbacks and lets you focus on what matters.
- Generated code is fully traceable and debuggable.
- Everything is generated during compile time with appropriate errors / warnings.
- No reflection used!
Gradle
buildscript {
dependencies {
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
}
}
apply plugin: 'com.neenbedankt.android-apt' dependencies {
compile 'com.vanniktech:onactivityresult:0.6.0'
apt 'com.vanniktech:onactivityresult-compiler:0.6.0'
}
Snapshots
compile 'com.vanniktech:onactivityresult:0.7.0-SNAPSHOT' apt 'com.vanniktech:onactivityresult-compiler:0.7.0-SNAPSHOT'
Modules are located on Maven Central.
Example
Override onActivityResult
in your Activity / Fragment and call ActivityResult.onResult
@Override protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
super.onActivityResult(requestCode, resultCode, data);
ActivityResult.onResult(requestCode, resultCode, data).into(this);
}
Annotate your methods and get the callback
@OnActivityResult(requestCode = 33) void onActivityResultTestActivity() {
/* Do something */
}
@OnActivityResult(requestCode = 1, resultCodes = {
Activity.RESULT_OK
}
) void onActivityResultActivityOk() {
/* Only do something when ok */
}
@OnActivityResult(requestCode = 1, resultCodes = {
Activity.RESULT_CANCELED
}
) void onActivityResultActivityCanceled() {
/* Only do something when canceled */
}
@OnActivityResult(requestCode = 2) void onActivityResultPickImage(final int resultCode, final Intent intent) {
/* Do something */
}
Various parameters are supported:
none
int
Intent
int, Intent
Intent, int
Where int
parameters will get the resultCode and Intent
parameters will get the Intent.
Note: Each annotated method shall only have one int and / or Intent variable.
In addition to that other parameter annotations are supported like:
- @IntentData
Uri uri
- @Extra
type var
- @ExtraBoolean
boolean booleanVar
- @ExtraByte
byte byteVar
- @ExtraChar
char charVar
- @ExtraDouble
double doubleVar
- @ExtraFloat
float floatVar
- @ExtraInt
int intVar
- @ExtraLong
long longVar
- @ExtraShort
short shortVar
- @ExtraString
String stringVar
Some examples can be found here.
The @Extra annotation is generic and works with every type mentioned above. In addition it also supports custom types which are implementing Parcelable
or Serializable
.
The disadvantage of @Extra is that it won't let you specify a default value therefore the other annotations do exist and should be used when needed.
Advantages over AfterMath
- Gives you compile error(s) when using invalid RequestCode
- Annotated method does not require
resultCode
andIntent
to be present. It'll work with every combination (no params, resultCode, Intent, resultCode & Intent, Intent & resultCode). In addition also all custom parameter annotations can be used. - The annotations are on mavenCentral and available as a separate artifact
- More detailed error messages
- Inheritance support
- @IntentData annotation with @NonNull & @Nullable support.
- Specify resultCodes with e.g.
resultCodes = { Activity.RESULT_OK }
. - @Extra, @ExtraBoolean, @ExtraByte, @ExtraChar, @ExtraDouble, @ExtraFloat, @ExtraInt, @ExtraLong, @ExtraShort, @ExtraString annotations.
Thanks
Thanks to JakeWharton's ButterKnife
Thanks to Hannes Dorfmann's Annotation Processing 101
License
Copyright (C) 2015 Vanniktech - Niklas Baudy
Licensed under the Apache License, Version 2.0