2017-08-21 61 views
1

我有情節的列表視圖與具有addind數據到各個描繪的方法的ListViewAdapter:的ListView行發現不正確查看

public void AddData(Sensor sensor, float[] data) 
{ 
    double[] dat = Array.ConvertAll(data, x => (double)x); 
    Plot plot; 
    if (_PlotMap.TryGetValue(sensor, out plot)) 
    { 
     plot.AddData(dat); 
    } 
} 

此方法使用「傳感器」的說法,以確定哪些情節數據是爲了。傳感器通過_PlotMap映射到一個繪圖。因爲每個行被添加到列表中,像這樣_PlotMap產生:

public override View GetView(int position, View convertView, ViewGroup parent) 
{ 
    View row = convertView; 
    PlotView pvPlot; 

    if (row == null) row = LayoutInflater.From(_Context).Inflate(Resource.Layout.MonitorPlotLineListViewRow, null, false); 
    pvPlot = row.FindViewById<PlotView>(Resource.Id.pvPlot); 
    var linePlot = new LinePlot(_Context, pvPlot, _Sensors[position], _Application.XAxisWidthSeconds, _panning, false, _frameTime, 1000); 
    if (!_PlotMap.ContainsKey(_Sensors[position])) 
     _PlotMap.TryAdd(_Sensors[position], linePlot); 

    return row; 
} 

我的問題就在這裏:

pvPlot = row.FindViewById<PlotView>(Resource.Id.pvPlot); 

它隨機返回plotviews,不一定plotview從正在生成的行。提前致謝。

編輯: 我看過的ID的作爲創建活動,這是結果(GetView方法被調用的次數的OnCreate期間一堆):

  1. 生成排0 - >積有ID 0,convertview 0
  2. 生成第1行 - >積有ID 1,convertview 1
  3. 生成排0 - >積有ID 0,convertview 0
  4. 生成第1行 - >積有ID 0, convertview 0
  5. 生成排0 - >積有ID爲0,convertview 0
  6. 生成排1 - >積有ID爲0,convertview 0
+0

因此,你有多個視圖具有相同的ID? – John3136

+0

是的,當我回去檢查已經生成的圖(現在有2個)的PlotView時,它們具有相同的參考。 – Lukeyb

+0

不應該是pvPlot =(PlotView)row.findViewById(R.id.pvPlot)?你有沒有不同? – Juan

回答