我如何访问随机 string.xml

How do i access a random 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 值。我发现这在将来可能会有用。 现在我选择不在单独的 class 中通过数组执行此操作。

使用getResources().getIdentifier("s1", "string", Activity.this.getPackageName())获取资源id。然后调用 txt.setText(id)

在 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);

试试这个:

假设您想要这个字符串名称:

final String ss1 = "s1";

您可以获取具有该名称的字符串(动态作为字符串),如下所示:

final String x = getString(getApplicationContext().getResources().getIdentifier(ss1, "string", getPackageName()));