我本来就很不好解释。这是我的问题:我发送给startActivity()方法的Intent包含一个私有(private)字段mMap,这是一个Map,其中包含我发送给putExtra()的字符串。当目标 Activity 开始时,对getIntent()的调用将返回一个Intent,表明不不包含这些值。 mMap字段为 null 。显然,由于对象ID不同,因此View层次结构中或启动新 Activity 的OS部分中的某些内容创建了一个新的Intent传递给它。
但为什么?为什么不将putData()值传递给新的Intent?
启动新 Activity 的 Activity 扩展了 Activity 。这是启动代码:
public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case 4:
i = new Intent(this, StatList.class);
i.putExtra("Name1", "Test1");
i.putExtra("Name3", "Test2");
startActivity(i);
}
}
我已经尝试了带有(不带)(推荐)完整程序包名称前缀的键值。
在Eclipse调试器中,我已经验证了播放器名称的值已正确插入到i.mExtras.mMap中。
这是初学者的代码:
public class StatList extends ListActivity {
private final StatsListAdapter statsAdapter;
public StatList() {
statsAdapter = StatsListAdapter.getInstance(this);
} // default ctor
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final Intent i = getIntent();
final Bundle extras = i.getExtras();
< more code here >
}
当执行此方法时,mIntent.mExtras.mMap为 null ,并且mIntent.mExtras.mParcelledData现在包含一些看起来不合理的值(调用startActivity()时为 null )。 getIntent()返回mIntent。
我也尝试过startActivityForResult(),结果相同。
从我在网上和示例应用程序中看到的文档和示例中,这应该很容易。我已经找到了另一种方法来满足我的迫切需求,但是我想知道是否有人可以帮助我理解为什么这种简单的方法行不通。
最佳答案
在您的主要 Activity 中:
i = new Intent(this, StatList.class);
i.putExtra("Name1", "Test1");
i.putExtra("Name3", "Test2");
startActivity(i);
然后在
StatList.class
中Bundle extras = getIntent().getExtras();
String name1 = extras.getString("Name1");
String name3 = extras.getString("Name3");
Log.i("StatList", "Name1 = " + name1 + " && Name3 = " + name3)