Java 正确地强制转换字符串键参数以放入Intent

Java 正确地强制转换字符串键参数以放入Intent,java,android,Java,Android,我需要根据数组的大小动态地向意图中添加额外内容。我尝试将键的名称与计数器的值连接起来,但没有效果 for(int i = 0; i < pos_list.size(); i++) { int pos = pos_list.get(i); String EXTRA_NAME = "DetailActivityFragment.EXTRA_NAME_" + Integer.toString(i); data.putExtra(EXTRA_NAME, tablet_lis

我需要根据数组的大小动态地向意图中添加额外内容。我尝试将键的名称与计数器的值连接起来,但没有效果

for(int i = 0; i < pos_list.size(); i++) {
    int pos = pos_list.get(i);
    String EXTRA_NAME = "DetailActivityFragment.EXTRA_NAME_" + Integer.toString(i);
    data.putExtra(EXTRA_NAME, tablet_list[pos].getTabletName());
}
for(int i=0;i字符串EXTRA_NAME=“DetailActivityFragment.EXTRA_NAME”+Integer.toString(i);
data.putExtra(额外名称,tablet\u列表[pos].getTabletName());
}

不管怎样,我能让它工作吗?甚至可能吗?

这段代码容易出现的错误就在这一行

String EXTRA_NAME = "DetailActivityFragment.EXTRA_NAME_" + Integer.toString(i);

由于您使用的是
,因此您的密钥实际上变成了
DetailActivityFragment。EXTRA\u NAME\u n
其中
n
是一个整数。由于DetailActivityFragment包含一组常量,您应该删除
”以实际访问它们

String EXTRA_NAME = DetailActivityFragment.EXTRA_NAME_ + Integer.toString(i);
另外,在检索值时,如果在输入值时使用了值,请确保使用
,如果希望使用
片段中定义的静态值,请确保不使用这些值

编辑:由于
DetailActivityFragment
包含多个字段,并且您希望基于
Integer
检索这些字段,因此一个潜在的解决方案是在
DetailActivityFragment
中为它们创建
get()
方法。例如,在该
片段
定义中(您可能还需要将该
设置为静态
,除非您可以引用片段的对象而不是静态引用)

现在你把多余的东西放进去做什么

String EXTRA_NAME = DetailActivityFragment.getExtraName(i);
检索值时,使用相同的方法获取键

另一种解决方案是使用
映射
检索值。您最初尝试的是(据我所知)反射,我对此一无所知,但您可以查看。

试试这个

替换


字符串EXTRA_NAME=“DetailActivityFragment.EXTRA_NAME”+Integer.toString(i)

有,


字符串EXTRA\u NAME=“DetailActivityFragment.EXTRA\u NAME”+i


“+”这是串联,它固有地将i转换为字符串。

“DetailActivityFragment.EXTRA_NAME_”似乎是一个常量,但您将其用作一个字符串,表示“DetailActivityFragment.EXTRA_NAME_”,这是有意的?@milez我在DetailActivityFragment中定义了一组常量字符串用作键。我基本上是在尝试实现使用for循环调用putExtra(DetailActivityFragment.EXTRA\u NAME\u 0,…),putExtra(DetailActivityFragment.EXTRA\u NAME\u 1,…)等的效果,但是EXTRA\u NAME\u不存在于DetailActivityFragment中,因为我实际上定义并初始化了EXTRA\u NAME\u 0,EXTRA\u NAME\u 1,EXTRA_NAME_2 etcI在执行Integer.toString之前尝试了该操作,但无效!
String EXTRA_NAME = DetailActivityFragment.getExtraName(i);