C # Случайный Всегда Тот же номер - PullRequest
0 голосов
/ 02 апреля 2012
public class ExpAdapter : BaseExpandableListAdapter
{
  private int seed = 1000;

  public override View GetChildView(int groupPosition, int childPosition, bool isLastChild, View convertView, ViewGroup parent)
    {
        if (convertView == null)
        {
            LayoutInflater inflater = (LayoutInflater) context.GetSystemService(Context.LayoutInflaterService);
            convertView = inflater.Inflate(Resource.Layout.inspection_row_2, null);
        }

        int currentID;
        Random randomizer = new Random(seed);

        TextView question = (TextView) convertView.FindViewById(Resource.Id.questionText);
        RadioGroup radio = (RadioGroup) convertView.FindViewWithTag("actionGroup");
        currentID = randomizer.Next(1,101);
        radio.Id = currentID;
        RadioButton pass = (RadioButton) convertView.FindViewWithTag("passed");
        currentID = randomizer.Next(1,101);
        pass.Id = currentID;
        RadioButton fail = (RadioButton) convertView.FindViewWithTag("failed");
        currentID = randomizer.Next(1,101);
        fail.Id = currentID;
        RadioButton correct = (RadioButton)convertView.FindViewWithTag("corrected");
        currentID = randomizer.Next(1,101);
        correct.Id = currentID;
        RadioButton na = (RadioButton)convertView.FindViewWithTag("na");
        currentID = randomizer.Next(1,101);
        na.Id = currentID;

        string[][] items = questions.childItems();
        question.Text = items[groupPosition][childPosition];

        seed++;

        return convertView;
    }
}

Используя точку останова для выполнения вышеприведенного, currentID = 1 на протяжении всего выполнения. Вышеупомянутый метод вызывается неоднократно, так как MonoDroid создает дочернюю группу элементов управления под родительской группой, а currentID равен ALWAYS = 1. Я также пытался создать currentID и randomizer в качестве частных статических переменных во всем классе. Тот же результат.

РЕДАКТИРОВАТЬ: я попытался создать новые экземпляры Random с начальным значением, которое отличалось для каждого вызова GetChildView. Код отредактирован выше, чтобы показать, как я это сделал. Тем не менее значение currentID всегда равно 1. Ниже приведен снимок экрана с информацией для рандомизатора в Locals. Эта информация выглядит одинаково, независимо от того, каков начальный номер. ???

enter image description here

1 Ответ

0 голосов
/ 02 апреля 2012

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

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