Скрыть / удалить случайную строку? - PullRequest
0 голосов
/ 03 июля 2011

Я использовал этот вопрос здесь в stackoverflow для создания случайной строки без проблем: D ( Показать случайную строку )

Иногда одна и та же строка появляется, и это раздражает.

Итак, я хочу, чтобы строка отображалась только один раз за сеанс, у меня уже есть кнопка Quit Session, которая убивает класс.Допустим, у меня есть номера от 1-3.Сначала отображается номер 2, затем 1, потому что может остаться только одно число, и только 3. 3. 1007 *

Код моей кнопки для «следующей кнопки».В настоящее время это убивает класс и начинает его снова!Как я могу изменить его, чтобы он просто отображал новую строку?

private void onButtonClick(Button clickedButton) {
    Intent startIntent = null;
    if (clickedButton.getId() == R.id.quit) {
        startIntent = new Intent(this, mainmenu.class);
        finish();
    }

    else if (clickedButton.getId() == R.id.next) {
         startIntent = new Intent(this, play.class);
         startActivity(startIntent); 
         finish(); 
    }

    if (startIntent != null) {
        startIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
        startActivityIfNeeded(startIntent, 0);
    }
}
private void setupbutton() {        
    View.OnClickListener onClickHandler = new View.OnClickListener() {          

        public void onClick(View v) {
            onButtonClick((Button)v);               
        }
    };
    Button button = (Button)findViewById(R.id.quit);
    button.setOnClickListener(onClickHandler);

    button = (Button)findViewById(R.id.next);
    button.setOnClickListener(onClickHandler);

Ответы [ 2 ]

0 голосов
/ 03 июля 2011

Появляется та же строка, потому что генератор случайных чисел генерирует случайные числа!Он может генерировать одно и то же число несколько раз подряд.

Существует множество возможностей, назвать два:

  1. Поместить все строки в массив и перемешать его.Затем вынимайте элементы по одному, начиная с индекса один:

    List strings = new ArrayList<String>(getResources().getStringArray(R.array.myArray));
    Collections.shuffle(list);
    
  2. Поместите все строки в массив, выберите строку со случайным индексом и удалите строку:

        Random rgenerator = new Random();
    
        ArrayList<String> strings = new ArrayList<String>(getResources().getStringArray(R.array.myArray));                 
        int index = rgenerator.nextInt(strings.size());
        String randomString =  strings.get(index);
        strings.remove(index);
    

РЕДАКТИРОВАТЬ: Хорошо, я вижу ...

Вы должны помнить, какие строки уже не использовались.Сохраните строки в списке и сделайте список статическим, чтобы вы могли сохранить состояние между созданием различных экземпляров Activity play:

private static ArrayList<String> myString;

Затем немного изменить конструктор:

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

    if (myString == null || myString.size() == 0) {
        Resources res = getResources();
        myString = new ArrayList(Arrays.asList(res.getStringArray(R.array.myArray)));
    }

    // get a random string
    int rand = rgenerator.nextInt(myString.size());
    String q = myString.get(rand);

    // remove the last used string from the list
    myString.remove(rand);

    TextView tv = (TextView) findViewById(R.id.text1);
    tv.setText(q);
}
0 голосов
/ 03 июля 2011

Произведите случайную перестановку индексов и затем используйте ее, чтобы выбрать следующую строку в последовательности.

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