La question est simple, je ne suis pas vraiment novice sur Android mais je n'arrive pas à retrouver les extras passés via une intention de l'activité A à l'activité B.
Voir l'activité A : il s'agit en fait d'un ListFragment, qui implémente onListItemClick() pour lancer une autre activité via une intention.
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
Log.i("FragmentList", "Item clicked: " + id);
Intent i = new Intent(getActivity(), ExpandedTweetView.class);
twitter4j.Status status = adapter.getItem(position);
Bundle extras = new Bundle();
extras.putString(KEY_TEXT, status.getText());
extras.putString(KEY_HANDLE, status.getUser().getScreenName());
extras.putString(KEY_NAME, status.getUser().getName());
extras.putString(KEY_TIMESTAMPS, status.getCreatedAt().toString());
extras.putLong(KEY_RETWEETS, status.getRetweetCount());
i.putExtra(KEY_EXTRAS, extras);
startActivity(i);
}
Cette partie fonctionne tout simplement, je l'ai testée en utilisant Log.v(TAG, "status.getText()" pour m'assurer que l'erreur ne provenait pas de l'interface utilisateur. Adaptateur passer un élément vide via getItem().
Voici le code de l'activité B :
public class ExpandedTweetView extends Activity {
TextView text;
TextView name;
TextView handle;
TextView createdAt;
TextView retweets;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.expanded_list_item);
Bundle extras = getIntent().getExtras();
ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
text = (TextView) findViewById(R.id.h_content);
name = (TextView) findViewById(R.id.h_name);
handle = (TextView) findViewById(R.id.h_handle);
createdAt = (TextView) findViewById(R.id.h_timestamp);
retweets = (TextView) findViewById(R.id.h_retweet_count);
if(extras != null) {
text.setText(extras.getString(TimelineFragment.KEY_TEXT));
name.setText(extras.getString(TimelineFragment.KEY_NAME));
handle.setText(extras.getString(TimelineFragment.KEY_HANDLE));
createdAt.setText(extras.getString(TimelineFragment.KEY_TIMESTAMPS));
retweets.setText(String.valueOf(extras.getLong(TimelineFragment.KEY_RETWEETS)));
}
}
Comme vous pouvez le voir, je crois que j'utilise le bon code pour obtenir les extras, l'utilisation du même code sur d'autres applications a fonctionné. Je ne sais pas pourquoi, lorsque l'ExpandedTweetView est créé via une intention, TOUTES les textViews sont vides. Voir : https://www.dropbox.com/s/pso6jbyn6rpks9n/empty_activity.png
Ce qui est encore plus étrange, c'est que j'avais d'abord essayé de vérifier si le paquet était nul en appelant ceci :
if (extras == null) {
Log.v(TAG, "Extras are empty :(");
}
Mais cette ligne n'a jamais été exécutée, ce qui signifie que le paquet n'est pas nul. J'ai également pensé que les clés utilisées pour récupérer les chaînes individuelles du paquet n'étaient peut-être pas les mêmes ; cependant, afin de remédier à cela, j'ai décidé de créer des constantes qui pourraient être utilisées des deux côtés. Comme vous pouvez le voir sur le code, la clé pour définir l'extra et la clé pour récupérer l'extra sont les mêmes.
Une idée de ce qui se passe ?