gpt4 book ai didi

java - 前缀字符串资源标识符以在运行时选择替代版本

转载 作者:太空狗 更新时间:2023-10-29 14:20:50 25 4
gpt4 key购买 nike

通常,我使用以下方法从资源 XML 中获取字符串值:

String mystring = getResources().getString(R.string.mystring);

现在,我想根据某些运行时条件选择字符串的替代版本。

String selectivestring;
if (someBooleanCondition)
selectivestring= getResources().getString(R.string.mystring);
else
selectivestring= getResources().getString(R.string.theirstring);

到目前为止一切顺利,但由于我有许多这样的“替代字符串对”,我想有条不紊地为一种类型(比如“my_”)和替代类型(比如“alt_”)添加前缀:

String selectivestring1;
if (someBooleanCondition)
selectivestring1= getResources().getString(R.string.my_string1);
else
selectivestring1= getResources().getString(R.string.alt_string1);
.
.
.
String selectivestring2;
if (someBooleanCondition)
selectivestring2= getResources().getString(R.string.my_string2);
else
selectivestring2= getResources().getString(R.string.alt_string2);

(上面的代码只是为了说明,我最终想做的是把它参数化,这样我就可以把它放在循环、数组或自己的访问器中)

如果 Java 中有预处理器,我可以使用字符串连接来选择“my_”与“alt_”前缀。但既然我知道没有,是否有办法、解决方法或建议在运行时修改字符串资源标识符,如上所述?

注意:每个字符串的替代版本是not在不同的语言/地区。我基本上是试图将字符串的原始版本和备用版本放在一起,彼此相邻,在同一个资源文件中,以便我可以轻松地比较两者。

最佳答案

首先,您的代码可以像这样更好一些:

int resource = 
someBooleanCondition ?
R.string.my_string2 : R.string.alt_string2;
String selectivestring2 = getResources().getString(resource);

正如您所描述的,这可以通过反射来完成,这是一个非常简单的例子:

package br;
import java.lang.reflect.Field;

final class R {
public static final class string {
public static final int alt_string1=0x7f060601;
public static final int alt_string2=0x7f060101;
}
}
public class StaticReflection {

public static boolean globalVariable = false;

//this would be android method getString
public static String fakeGetString(int id){
switch (id){
case R.string.alt_string1: return "it";
case R.string.alt_string2: return "works";
default:
return "O NOES";
}
}

//static method
public static String getResource(String resId) throws Exception {
if (globalVariable){
resId += "string1";
} else {
resId += "string2";
}
Field f = R.string.class.getDeclaredField(resId);
Integer id = (Integer) f.get(null);
return fakeGetString(id);
}

public static void main(String[] args) throws Exception {
globalVariable=true;
System.out.println(getResource("alt_"));
globalVariable=false;
System.out.println(getResource("alt_"));
}
}

关于java - 前缀字符串资源标识符以在运行时选择替代版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17035326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com