1

我正在使用捆绑包将数据从活动发送到片段。

这是活动中的代码:

 Bundle extras1 = new Bundle();
    extras1.putString("productId", productId);
    extras1.putString("ddsId", id1);

 frag1.setArguments(extras1);

 getSupportFragmentManager().beginTransaction().add(frame1.getId(), frag1, "fragment_grandchild1" + fragCount).commit();

现在,当我在调试中运行我的项目并将鼠标悬停在 exras1 上时,我可以看到 productId 和 ddsId 都具有它们的值。

然后 ehre 是我片段中的代码:

    Bundle extras = getActivity().getIntent().getExtras();
    if (extras != null) {
        productId = extras.getString("productId");
        ddsId = extras.getString("ddsId");
     }

现在发生的奇怪的事情是它只接收productId?

当我调试并将鼠标悬停在附加功能上时,它只有 productId 而不是 ddsID。这怎么可能发生?

编辑:

我发现了它在做什么。出于某种原因,它会向我的片段发送活动类收到的包。不是我指定的那个。

我该如何改变呢?

4

1 回答 1

1

您正在阅读活动的附加内容。尝试以下操作:

Bundle extras1 = new Bundle();
extras1.putString("productId", productId);
extras1.putString("ddsId", id1);

Fragment fg = new Fragment();
fg.setArguments(extras1);

然后在你的片段中:

Bundle extras = getArguments();
if (extras != null) {
    productId = extras.getString("productId");
    ddsId = extras.getString("ddsId");
}

利用:

Bundle extras = getArguments();

而不是:

Bundle extras = getActivity().getIntent().getExtras();

提示(希望有帮助)

我在很多代码上看到,如果你没有很多额外的东西,通常的做法是在片段中创建一个像这样的静态方法。

public static YourFragment newInstance(String extra1, int extra2) {
    Fragment fg = new YourFragment();

    Bundle args = new Bundle();
    args.putString("extra1TagId", extra1);
    args.putInt("extra2TagId", extra2);

    fg.setArguments(args);

    return fg;
}
于 2013-08-21T21:57:21.113 回答