如何在Xamarin.forms中的事件中更改TextView中的文本

时间:2015-11-10 21:48:11

标签: c# xamarin xamarin.android xamarin.forms

我在本地PageRenderer(Android)中使用Xamarin.Forms并且我实现了Geolocator(https://github.com/XLabs/Xamarin-Forms-Labs/wiki/Geolocator),以便在更改位置时使用OnPositionChanged事件。但是在他们使用的原始代码中:

    private void OnPositionChanged(object sender, PositionEventArgs e)
            {
                BeginInvokeOnMainThread (() => {
                    ListenStatus.Text = e.Position.Timestamp.ToString("G");
                    ListenLatitude.Text = "La: " + e.Position.Latitude.ToString("N4");
                    ListenLongitude.Text = "Lo: " + e.Position.Longitude.ToString("N4");
                });
            }

它不适用于我的应用,现在我实现了类似的东西:

private void OnPositionChanged(object sender, PositionEventArgs e)
        {
            _activity.RunOnUiThread(() => {
                _listenStatus.Text = "Estado:" + e.Position.Timestamp.ToString("G");
                _listenLatitude.Text = "Latitud: " + e.Position.Latitude.ToString("N4");
                _listenLongitude.Text = "Longitud: " + e.Position.Longitude.ToString("N4");
            });
        }

当我的OnElementChanged如下:

protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
        {
            base.OnElementChanged (e);
            _activity = this.Context as Activity;
            _activity.SetContentView (Resource.Layout.RequestService);

            _view = _activity.LayoutInflater.Inflate(Resource.Layout.RequestService, this, false);

            AddView (_view);

            SetupElements ();
            SetupGeolocator ();
        }

我的SetupElements:

void SetupElements ()
        {
            _listenStatus = _view.FindViewById<TextView> (Resource.Id.ListenStatus);
            _listenLatitude = _view.FindViewById<TextView> (Resource.Id.ListenLatitude);
            _listenLongitude = _view.FindViewById<TextView> (Resource.Id.ListenLongitude);
        }

但是它无法正常工作,数据正在成功地进行转换,TextViews已经成功加载,当RunOnUiThread在视图中没有任何变化时。

1 个答案:

答案 0 :(得分:0)

您可以在自定义渲染器中使用静态页面来更改视图。

假设您有一个页面,如:;

public class SomePage : ContentPage
{
      public static SomePage ThisPage {get; set;}

      Label label;

      public SomePage()
      {
           ThisPage = this;
           label = new Label();
      }

}

在您的页面渲染器中使用它:

SomePage.ThisPage.label.Text = "SomeText";

希望这有帮助。