Показать случайную строку - PullRequest
3 голосов
/ 27 апреля 2010

Я пытаюсь отобразить случайную строку каждый раз, когда нажимается кнопка из набора строк, определенных в strings.xml. это пример идентификатора строки

<string name="q0">
    <string name="q1">
    <string name="q2">
    <string name="q3">
    <string name="q4">

Java-код для получения случайной строки.

private static final Random rgenerator = null;

    int RandomQ = R.string.q0  (rgenerator.nextInt(5) + 1);
    String q = getString(RandomQ);

Если я пытаюсь использовать этот Java-код, я получаю ошибку "q0" в R.string.q0, которая равна The method q0(int) is undefined for the type R.string, если я пытаюсь использовать быстрое исправление и создать метод, это работает. но это не позволит мне сохранить или запустить приложение, потому что оно заменяет мой метод создания и показывает это сообщение

R.java was modified manually! Reverting to generated version!

спасибо за чтение.

Ответы [ 3 ]

21 голосов
/ 27 апреля 2010

Вы можете определить свои строки в массиве, что поможет упростить эту задачу (res / values ​​/ array.xml):

<string-array name="myArray"> 
    <item>string 1</item> 
    <item>string 2</item> 
    <item>string 3</item> 
    <item>string 4</item> 
    <item>string 5</item>
</string-array> 

Затем вы можете создать массив для хранения строк и выбрать случайную строку из массива для использования:

private String[] myString; 

myString = res.getStringArray(R.array.myArray); 

String q = myString[rgenerator.nextInt(myString.length)];

Пример кода :

package com.test.test200;

import java.util.Random;

import android.app.Activity;
import android.content.res.Resources;
import android.os.Bundle;
import android.widget.TextView;

public class Test extends Activity {
/** Called when the activity is first created. */

    private String[] myString;
    private static final Random rgenerator = new Random();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    Resources res = getResources();

    myString = res.getStringArray(R.array.myArray); 

    String q = myString[rgenerator.nextInt(myString.length)];

    TextView tv = (TextView) findViewById(R.id.text1);
    tv.setText(q);
}
}
2 голосов
/ 05 февраля 2015

создать строковый массив в res / values ​​/ array.xml:

<?xml version="1.0" encoding="utf-8"?>  
    <resources>  
<string-array name="custom_array"> 
    <item>aalia</item> 
    <item>asin</item> 
    <item>sonakshi</item> 
    <item>kajol</item> 
    <item>madhuri</item>
</string-array> 
</resources>

тогда в своей деятельности напишите код

String[] array = context.getResources().getStringArray(R.array.custom_array);

        String randomStr = array[new Random().nextInt(array.length)];

        text_dialog.setText(""+randomStr);
0 голосов
/ 27 апреля 2010

Зачем тебе это?

R.string.q0

Предполагая, getString(RandomQ) является действительным утверждением, я бы подумал

int RandomQ = rgenerator.nextInt(5) + 1;

будет работать просто отлично.

Кроме того, как примечание: во многих случаях эти автофиксы в вашей IDE ненадежны и небезопасны в использовании. Если вы не знаете, почему он говорит вам что-то делать, не делайте этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...