-
Notifications
You must be signed in to change notification settings - Fork 2
Argument Pass by Activity or Fragment
kevadiya krunal edited this page Mar 28, 2019
·
4 revisions
A collection of useful extension methods for Android.
Argument bind methods can be used with Activity, Fragment, and support library Fragment subclasses. You can also implement ArgumentsAware interface to provide a custom arguments source. Full list of supported bindings:
-
bindArgument<Boolean>/bindOptionalArgument<Boolean> -
bindArgument<Double>/bindOptionalArgument<Double> -
bindArgument<Int>/bindOptionalArgument<Int> -
bindArgument<Long>/bindOptionalArgument<Long> -
bindArgument<String>/bindOptionalArgument<String> -
bindArgument<CharSequence>/bindOptionalArgument<CharSequence> -
bindArgument<Float>/bindOptionalArgument<Float> -
bindArgument<Enum>/bindOptionalArgument<Enum> -
bindArgument<Parcelable>/bindOptionalArgument<Parcelable> -
bindArgument<Serializable>/bindOptionalArgument<Serializable>
Every bindXXXArgument returns a ReadWriteProperty so they can be used with var's as well. In this case you don't have to deal with Bundle at all. No explicit Bundle creation, no silly EXTRA_XXX constants, no annoying Bundle.putXXX and Bundle.getXXX calls. Everything just works:
- In Activity use
class ArgumentActivity : AppCompatActivity() {
companion object {
fun newInstance(context: Context): Intent = Intent(context, ArgumentActivity::class.java).apply {
putExtra("name", "Krunal Kevadiya")
putExtra("picture", "http:\\xyz.com\abc.jpg")
}
}
// Extra name is automatically inferred from property name ("name" in this case)
var name by bindArgument<String>("name")
// You can also provide a default value using "default" named argument
var picture by bindArgument("picture", "")
// Here is option argument or null value supporting
var email by bindOptionalArgument<String>("email")
@SuppressLint("SetTextI18n")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_argument)
.......
}
}- In Fragment use
class UserProfileFragment : Fragment() {
companion object {
fun newInstance(): UserProfileFragment = UserProfileFragment().apply {
this.name= "Krunal Kevadiya"
this.profile = "http:\\xyz.com\abc.jpg"
this.email = null
}
}
// extra name is automatically inferred from property name ("name" in this case)
var name by bindArgument<String>()
// you can also provide a default value using "default" named argument
var profile by bindArgument(default = "")
var email by bindOptionalArgument<String>()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.activity_argument, container, false)
}
}