Je vais afficher la nouvelle "façon" avec Android X dans une réponse courte (parce que dans certains cas, vous n'avez pas besoin de registre ou de contrat personnalisé). Si vous voulez plus d'informations, consultez : Obtenir un résultat à partir d'une activité
Important : il y a en fait un bug avec la rétrocompatibilité d'Android X, vous devez donc ajouter fragment_version
dans votre fichier Gradle. Sinon, vous obtiendrez une exception "New result API error : Can only use lower 16 bits for requestCode". .
dependencies {
def activity_version = "1.2.0-beta01"
// Java language implementation
implementation "androidx.activity:activity:$activity_version"
// Kotlin
implementation "androidx.activity:activity-ktx:$activity_version"
def fragment_version = "1.3.0-beta02"
// Java language implementation
implementation "androidx.fragment:fragment:$fragment_version"
// Kotlin
implementation "androidx.fragment:fragment-ktx:$fragment_version"
// Testing Fragments in Isolation
debugImplementation "androidx.fragment:fragment-testing:$fragment_version"
}
Maintenant, il vous suffit d'ajouter cette variable membre de votre activité. Ceci utilise un registre prédéfini et un contrat générique.
public class MyActivity extends AppCompatActivity{
...
/**
* Activity callback API.
*/
// https://developer.android.com/training/basics/intents/result
private ActivityResultLauncher<Intent> mStartForResult = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
switch (result.getResultCode()) {
case Activity.RESULT_OK:
Intent intent = result.getData();
// Handle the Intent
Toast.makeText(MyActivity.this, "Activity returned ok", Toast.LENGTH_SHORT).show();
break;
case Activity.RESULT_CANCELED:
Toast.makeText(MyActivity.this, "Activity canceled", Toast.LENGTH_SHORT).show();
break;
}
}
});
Avant la nouvelle API, vous aviez :
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MyActivity .this, EditActivity.class);
startActivityForResult(intent, Constants.INTENT_EDIT_REQUEST_CODE);
}
});
Vous pouvez remarquer que le code de la requête est maintenant généré (et maintenu) par le framework Google. Votre code devient :
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MyActivity .this, EditActivity.class);
mStartForResult.launch(intent);
}
});
2 votes
Duplication possible de Comment retourner un résultat (startActivityForResult) à partir d'une activité TabHost ?