6

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

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

启动新活动的活动扩展了活动。这是启动代码:

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 中。

这是来自startee的代码:

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(),结果相同。

从我在网上和示例应用程序中看到的文档和示例中,这应该很容易。我找到了另一种方法来满足我的迫切需要,但我想知道是否有人可以帮助我理解为什么这么简单的事情不起作用。

4

2 回答 2

2

在您的主要活动中:

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)
于 2012-11-21T02:16:20.580 回答
0

更新以下两行

最终意图 i = getIntent(); 最终捆绑附加服务 = i.getExtras();

将其替换为

Bundle extras = getIntent().getExtras();
if(extras!= null){
String var1= extras.getString("Name1");
String var2= extras.getString("Name2");
}
于 2012-11-21T04:22:15.233 回答