我正在使用标准的Android Intent / Bundle方法将数据传递给子活动。
问题是尽管在活动开始之前Intent看起来很好,但它在子活动中显示为null。我找不到其他有这个问题的人,所以我想我会问一下关于在哪里看/如何调试的指针。
(目标是Android 2.1)
父活动摘录:
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Intent i = new Intent(ctx, ArticleView.class);
i.putExtra("url", articles.get(position).url.toString());
// The following line correctly logs the URL
Log.d(TAG,"Starting article viewer with url " + i.getStringExtra("url"));
startActivityForResult(i,ACTIVITY_ARTICLE);
}
子活动代码段:
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.article_view);
if (icicle != null) {
// Never called!
} else {
// Always called
Log.d(TAG,"Icicle is null - no URL passed in");
}
}
忽略icicle为null并尝试从中检索状态信息(使用getString)这一事实导致挂起并且:
03-14 22:23:03.529: WARN/ActivityManager(52): Activity HistoryRecord{44ddd238 com.t.s/.ArticlesList} being finished, but not in LRU list
任何提示都非常赞赏。
答案 0 :(得分:3)
传递给子活动(或任何活动)的构造函数的不是Intent。
可以通过
获取意图Intent intent = getIntent();
你所指的Bundle icicle是当Activity从暂停状态恢复时使用的Bundle。例如。如果您需要在重新启动之前保存活动的任何状态,那么这就是存储数据所在的位置。
答案 1 :(得分:1)
在OnCreate()中尝试以这种方式访问Bundle
Bundle b = getIntent().getExtras();