我正在使用捆绑包将数据从活动发送到片段。
这是活动中的代码:
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。这怎么可能发生?
编辑:
我已经发现它在做什么。由于某种原因,它向我的片段发送了活动类收到的捆绑包。不是我指定的那个。
我该如何改变呢?
您正在阅读活动中的其他内容。尝试以下操作:
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;
}