我正在尝试在点击某些内容时操纵布局,为此我必须使用Handler类。问题是如果没有收到此消息,我就无法做到:
这是我的代码。 (我正在使用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 :(得分: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;
}
}