Bonjour à tous,
je sais que les problèmes lié au non appel de OnActivityResult sont légions et j'ai déjà parcouru un bon paquet de réponse lié à ce problème, et pourtant, je n'ai toujours pas résolu le mien
Pas du tout spécialisé dans le développement Android, je m’intéresse et je teste.
Ainsi, j'ai fait une application avec une Navigation Drawer Activity. Sous Android Studio avec le menu contextuel New -> Activity -> Navigation Drawer Activity
Mon Navigation Activity a 3 items dans son menu et donc 3 fragments qui s'y insère.
Dans ma navigation activity lorsqu'un fragment est chargé, il y a egalement une Action Bar, et lorsque je clique sur l'action ajouté, je démarre une seconde activité qui doit me retourner une réponse
Extract de NavigationActivity
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.other_activity) { startActivityForResult(new Intent(this, OtherActivity.class), RESULT_OK ); overridePendingTransition(R.anim.slide_in_from_left, R.anim.slide_out_to_left); return true; } return super.onOptionsItemSelected(item); }
Dans ma seconde activité, j'effectue mes actions et je souhaite retourner un objet (class JAVA). En fait retourner l'objet sélectionné dans une liste.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 public class OtherActivity extends Activity { private RadListView _listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.other_activity); MyDatabaseHandler db = new MyDatabaseHandler(this); if ( db.getMyObjCount()> 0 ) { _listView = (RadListView) findViewById(R.id.listView); final MyAdapter myViewAdapter = new MyAdapter(db.getAllMyObjs()); _listView.setAdapter(myViewAdapter); _listView.addItemClickListener( new RadListView.ItemClickListener() { @Override public void onItemClick(int itemPosition, MotionEvent motionEvent) { MyObj obj = (MyObj)myViewAdapter.getItem( itemPosition ); Intent intent = new Intent(); intent.putExtra("selected_item",obj); setResult(RESULT_OK, intent); finish(); } @Override public void onItemLongClick(int itemPosition, MotionEvent motionEvent) { } }); } else { startActivity( new Intent( this, ThirdActivity.class)); } } @Override public void onBackPressed() { // Juste pour test, n'appelle pas plus le onActivityResult Intent data = new Intent(); data.putExtra("key", new MyObj( "toto", 5, 12, "titi") ); setResult(RESULT_OK, data); finish(); super.onBackPressed(); } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if ( id == R.id.home ) { // Never called, how how is identified the up button of action bar ?!? Intent data = new Intent(); data.putExtra("key", new MyObj( "toto", 5, 12, "titi") ); setResult(RESULT_OK, data); finish(); } return super.onOptionsItemSelected(item); } }
Ce cas semble très simple, on passe de l'activité Navigation a une seconde activité et on revient avec un résultat. Malheureusement, onActivityResult n'est jamais appelé dans l'activité navigation (pas d’arrêt sur le breakpoint) et je ne comprend pas pourquoi !!?? Dans ce schéma, cela ne semble rien a voir avec les fragments, mais juste une discussion d'activité à activité.
Comme je suis dans les choux, merci pour votre aide.
Partager