web-dev-qa-db-fra.com

Obtenez une chaîne supplémentaire de l'activité Kotlin

Je veux obtenir une chaîne supplémentaire dans une autre activité à partir d'une intention. C'est le moyen de créer mon intention

        val intent = Intent(this, Main2Activity::class.Java)
        intent.putExtra("samplename", "abd")
        startActivity(intent)

Comment puis-je obtenir la valeur de cette intention dans une autre activité

29
zasaz

Réponse trouvée, dans l'activité suivante, vous devez faire ceci pour obtenir la chaîne:

val ss:String = intent.getStringExtra("valor")
32
zasaz

CHARGE

val value: String = txt_act_main.text.toString() // or just your string
val intent = Intent(this, SecondActivity::class.Java)
intent.putExtra("value", value)
startActivity(intent)

// option 2 toutes les classes internes doivent être implenet à Serializable

   getIntent().putExtra("complexObject", clickedTitle);

GET

var bundle :Bundle ?=intent.extras
var message = bundle!!.getString("value") // 1
var strUser: String = intent.getStringExtra("value") // 2
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()

//Option 2

 var myProg = intent.getSerializableExtra("complexObject") as MenuModel

IMPLICIT (à partager avec d'autres applications)

val value: String = txt_act_main.text.toString()
var intent = Intent()
intent.action = Intent.ACTION_SEND
intent.putExtra(Intent.EXTRA_TEXT, value)
intent.type="text/plain"
startActivity(Intent.createChooser(intent,"Share to "))
12
Sam

vous pouvez vérifier si la valeur d'intention est nulle ou non

val bundle :Bundle ?=intent.extras
    if (bundle!=null){
        val message = bundle.getString("object") // 1

        Toast.makeText(this, message, Toast.LENGTH_SHORT).show()

    }
7
Rahul ShaRma

Peut utiliser ce code:

val bundle=intent.extras
val samplename:String
if(bundle!=null)
{
    samplename = bundle.getString("samplename")
}
4
Ahmad Aghazadeh

La réponse acceptée ne résout pas le cas où l'intention n'est pas là. Parce que lorsque la clé n’existe pas intentionnellement, getStringExtra() vous donnera null même sa signature indique un String plutôt que un String?.

Vous pouvez utiliser val text:String = intent.getStringExtra(intentKey) ?: "" pour vous assurer qu'aucun événement NPE ne s'est produit.

Mais encore une réponse ici:

C'est pour le cas où, vous essayez de récupérer la chaîne de l'intention, si la valeur est là, nous obtenons la valeur, sinon, elle retournera à l'écran précédent car cette intention est essentielle. Quelque chose ne va pas, mais nous ne voulons pas bloquer l'activité.

private fun getStringFromIntentOrShowError(intentKey: String):String {
    val text:String? = intent.getStringExtra(intentKey)

    if (text == null) {
        showDialog(
            "Error", 
            "No $intentKey found"
        ) {
            it.dismiss()
            finish()
        }
        return ""
    }

    return text
}

// I use anko to show a dialog, you can use your one.
private fun showDialog(
    title:String,
    message:String,
    yesButtonCallback: (d:DialogInterface) -> Unit
) {
    alert(message, title){ yesButton{
            yesButtonCallback(it)
    } }.show()
}

Ensuite, vous pouvez l'utiliser comme ceci:

val text:String = getStringFromIntentOrShowError("asd")

et le texte aura toujours une valeur

3
Albert Gao

Dans Main2Activity, vous pouvez avoir votre code comme ceci:

    val intent = getIntent();
    val myValue = intent.getStringExtra("key")
    Log.d(TAG,"myValue"+myValue)
3
kukroid