2012-04-02 96 views
0
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作爲私有靜態變量。同樣的結果。C#隨機總是相同的數字

編輯:我試圖創建新的隨機實例種子值不同,每次調用GetChildView。代碼在上面進行編輯以顯示我是如何做到的。仍然currentID的值總是= 1.下面是Locals中隨機數發生器的信息屏幕截圖。無論種子號是什麼,這些信息看起來都是一樣的。 ???

enter image description here

+1

你有沒有嘗試將種子喂入隨機發生器? – 2012-04-02 18:08:39

+0

是的。同樣的結果。另外,我的理解是,在我的示例中使用seed會在每次迭代過程中生成相同的數字。該號碼正用於該對象的ID並且需要是唯一的。 – jmease 2012-04-02 18:11:12

+0

我不明白你在問我什麼。我期望它使用DateTime創建一個新的Random對象,然後在GetChildView的下一次迭代之前抓取下一個隨機數5次,此時將根據當前的DateTime創建一個新的Random對象。 – jmease 2012-04-02 18:15:26

回答

0

隨機數發生器,計算與以毫秒爲單位的系統時間。所以,如果你快速調用它,即在相同的毫秒內,他們會得到相同數量的種子,從而產生相同的隨機數。

+0

是的,但我只創建一個Random對象,並在創建一個新對象之前調用Next方法5次。即使下一個新的隨機對象在同一毫秒內創建,至少該單個對象的值是否會隨每次對Next的調用而改變? – jmease 2012-04-02 18:22:16

+0

@jmease代碼可以在.NET 4.0上正常工作,使用基於默認時間的種子或其他方式播種。這似乎是一個平臺特定的問題。 – 2012-04-02 18:46:17

+0

@RichardHein,我擔心你可能是對的。到目前爲止,MonoDroid已經有點小錯誤了。我決定只是使用遞增的種子變量來分配唯一的ID而不是使用Random類。似乎服務於這個目的。 – jmease 2012-04-02 19:22:38