2017-04-24 44 views
0

我試圖在點擊某些東西時操作佈局,並且要這樣做,我必須使用處理程序類。問題是我不能這樣做,沒有得到這個消息:從非活動類添加視圖時出現異常

Screen capture of the error message

這裏是我的代碼。 (我正在使用C#/ Xamarin.android)

public class ClickListener : VectorElementEventListener 
{ 
    MapView mapView; 
    MainActivity activity; 

    public ClickListener(MainActivity activity) 
    { 
     this.mapView = activity.mapView; 
     this.activity = activity; 
    } 

    public override bool OnVectorElementClicked(VectorElementClickInfo clickInfo) 
    { 
     var zoomIn = activity.FindViewById<Button>(Resource.Id.zoomIn); 
     zoomIn.Text = "+"; // The exception originates from this line 

     return true; 
    } 
} 

如果將它們放置在MainActivity類中,那麼這兩行工作正常。這是爲什麼?

我一直在這上面停留太久。請幫忙!

+0

請提供你的錯誤日誌來幫助,但我不認爲你可以在無活動類中調用FindViewById <>,你可以傳遞視圖引用 –

回答

1

我明白了。以下是解決方案: 如果我們想在UI上進行更改,我們應該使用一個Action並在主活動UI線程上運行它。像這樣:

public class ClickListener : VectorElementEventListener 
{ 
    MapView mapView; 
    MainActivity activity; 

    public ClickListener(MainActivity activity) 
    { 
     this.mapView = activity.mapView; 
     this.activity = activity; 
    } 

    public override bool OnVectorElementClicked(VectorElementClickInfo clickInfo) 
    { 
     Action manipUI =() => { 
      var zoomIn = activity.FindViewById<Button>(Resource.Id.zoomIn); 
      zoomIn.Text = "+"; 
     } 
     activity.RunOnUIThread(manipUI); 
     return true; 
    } 
} 
相關問題