Как мне получить доступ к случайному 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)

Другие вопросы по тегам