我如何访问随机string.xml

时间:2016-03-18 20:54:07

标签: java android xml string findviewbyid

一个简单的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值。我发现这可能在将来有用。 现在我已选择通过数组在单独的类中执行此操作。

3 个答案:

答案 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()));