一个简单的Quote生成器是有问题的,我已经构思了代码,并假设如果我将我的字符串保存在xml中它将起作用
<resources>
<string name="app_name">"Lift Quote"</string>
<string name="action_settings">Settings</string>
<!-- put buttons in here -->
<!-- here are the quotes -->
<!-- inspiring -->
<string name="s1">"He who has a why to live can bear almost any how." -Nietzche</string>
<string name="s2">"Life is about making an impact, not making an income." –Kevin Kruse</string>
<string name="s3">You miss 100% of the shots you don’t take. –Wayne Gretzky</string>
<!-- deep -->
<string name="s4">" A man's character is his fate. " -Heraclitus</string>
<string name="s5">"Why do you stay in prison when the door is so wide open?" -Rumi</string>
<string name="s6">"When I let go of what I am, I become what I might be." -Lao Tzu</string>
<!-- positive -->
<string name="s8">"Happiness is not something ready made. It comes from your own actions." -Dalai Lama</string>
<string name="s9">"If you have a positive attitude and constantly strive to give your best effort,
eventually you will overcome your immediate problems and find you are ready for greater challenges." -Pat Riley
</string>
</resources>
并在主要访问它们。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// WHERE MY CODE STARTS
//RANDOM GENERATOR that DOESN'T WORK
Random rand = new Random();
final int irandomIndex = rand.nextInt((3 - 1) + 1)+1;
final int drandomIndex = rand.nextInt((4 - 6) + 1)+4;
final int prandomIndex = rand.nextInt((7 - 9) + 1)+7;
final String iIndex = "s"+irandomIndex;
final String dIndex = "s"+drandomIndex;
final String pIndex = "s"+prandomIndex;
//STRING
final TextView txt = (TextView) findViewById(R.id.textView);
//BUTTONS
//
Button inspireBtn = (Button) findViewById(R.id.iButton);
Button deepBtn = (Button) findViewById(R.id.dButton);
Button positiveBtn = (Button) findViewById(R.id.pButton);
// ON CLICK LISTENRS
inspireBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
String index = iIndex;
txt.setText(getResources().getString(R.string.index));
//"cannot resolve symbol 'index';"
}
});
//this wouldn't work either
final String ss1 = "s1";
final String x = getResources().getString(R.string.ss1);
deepBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
txt.setText(x);
}
});
//this wouldn't work either same error
final String sx2 = "s1";
final String m = getResources().getString(R.string.sx2);
positiveBtn.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
txt.setText(m);
}
});
}
我想我的问题更多:如何通过String变量访问String.xml值。我发现这可能在将来有用。 现在我已选择通过数组在单独的类中执行此操作。
答案 0 :(得分:5)
在strings.xml中的string-array
中定义引号,如下所示
<string-array name="mystrings">
<item>value 1</item>
<item>value 2</item>
<item>value 3</item>
</string-array>
然后,在您的activity / fragment / whatelse
中访问此资源String[] array = getResources().getStringArray(R.array.mystrings);
答案 1 :(得分:1)
使用getResources().getIdentifier("s1", "string", Activity.this.getPackageName())
获取资源ID。然后拨打txt.setText(id)
答案 2 :(得分:1)
试试这个:
假设你想要这个字符串名称:
final String ss1 = "s1";
您可以获取具有该名称的字符串(动态地作为字符串),如下所示:
final String x = getString(getApplicationContext().getResources().getIdentifier(ss1, "string", getPackageName()));