2016-03-18 3 views
1

Простого Quote генератор в вопросе, я концептуализировал код и предположила, что это будет работать, если я держать мои строки в XMLКак я получить доступ к случайным string.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. Я считаю, что это может быть полезно в будущем. На данный момент я отказался сделать это в отдельном классе через Array.

ответ

5

Определите свои котировки в 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); 
+0

Я чувствую, что это было бы легче. Затем вы произвольно выбираете из массива строк, чтобы получить соответствующую строку. – DeeV

1

Используйте getResources().getIdentifier("s1", "string", Activity.this.getPackageName()), чтобы получить идентификатор ресурса. Затем вызовите txt.setText(id)

1

Попробуйте это:

Предположим, что вы хотите это название строки:

final String ss1 = "s1"; 

Вы можете получить строку с таким именем (динамически в виде строки) следующим образом:

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