为什么启动我的活动的Intent不包含我在发送给startActivity()的Intent中放入的额外数据?

use*_*577 6 android android-intent android-activity

我最初解释得很糟糕.这是我的问题:我发送给startActivity()方法的Intent包含一个私有字段mMap,它是一个包含我发送给putExtra()的字符串的Map.当目标活动开始时,对getIntent()的调用将返回包含这些值的Intent .mMap字段为.显然,View层次结构的内容或启动新活动的OS部分创建了一个新的Intent传递给它,因为对象ID是不同的.

但为什么?为什么putData()值没有携带fowrard到新的Intent?

启动新活动的活动扩展了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);
     }   
 }
Run Code Online (Sandbox Code Playgroud)

我已尝试使用和不使用(推荐)完整包名称前缀的键值.

在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 >
} 
Run Code Online (Sandbox Code Playgroud)

当执行到此方法时,mIntent.mExtras.mMap为null,并且mIntent.mExtras.mParcelledData现在包含一些看起来不合理的值(当调用startActivity()时它为null).getIntent()返回mIntent.

我也尝试过startActivityForResult(),结果相同.

从我在网上和示例应用中看到的文档和示例中,这应该很简单.我找到了满足我眼前需求的另一种方法,但我想知道是否有人可以帮助我理解为什么这么简单的东西不起作用.

jnt*_*jns 2

在您的主要活动中:

i = new Intent(this, StatList.class);
i.putExtra("Name1", "Test1");
i.putExtra("Name3", "Test2");
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

然后在StatList.class

Bundle extras = getIntent().getExtras();
String name1 = extras.getString("Name1");
String name3 = extras.getString("Name3");
Log.i("StatList", "Name1 = " + name1 + " && Name3 = " + name3)
Run Code Online (Sandbox Code Playgroud)