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
dependencies {
compile 'com.vanniktech:onactivityresult:0.7.0'
annotationProcessor 'com.vanniktech:onactivityresult-compiler:0.7.0'
}
Snapshots
compile 'com.vanniktech:onactivityresult:0.8.0-SNAPSHOT'
annotationProcessor 'com.vanniktech:onactivityresult-compiler:0.8.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