Skip to content

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)
    }
}

Clone this wiki locally