Android捆绑行为异常

问题描述 投票:1回答: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。这怎么可能发生?

编辑:

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

我该如何改变呢?

android bundle
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();

TIP(希望有帮助)

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

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.