Как мне получить доступ к случайному string.xml
Простой генератор цитат под вопросом, я концептуализировал код и предположил, что он будет работать, если я сохраню свои строки в 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.xml через переменную String. Я считаю, что это может быть полезно в будущем. Сейчас я решил сделать это в отдельном классе через массив.
3 ответа
Определите ваши цитаты в string-array
в strings.xml, как показано ниже
<string-array name="mystrings">
<item>value 1</item>
<item>value 2</item>
<item>value 3</item>
</string-array>
Затем доступ к этому ресурсу в вашей деятельности / фрагмент /whatelse
String[] array = getResources().getStringArray(R.array.mystrings);
Попробуй это:
Допустим, вы хотите эту строку имени:
final String ss1 = "s1";
Вы можете получить строку с этим именем (динамически как строку) следующим образом:
final String x = getString(getApplicationContext().getResources().getIdentifier(ss1, "string", getPackageName()));
Использование getResources().getIdentifier("s1", "string", Activity.this.getPackageName())
чтобы получить идентификатор ресурса. Тогда позвони txt.setText(id)