xamarin 更新标签被更改为不同的活动而被杀死

Posted

技术标签:

【中文标题】xamarin 更新标签被更改为不同的活动而被杀死【英文标题】:xamarin update label been killed by change to a different activity 【发布时间】:2020-10-22 10:54:34 【问题描述】:

我们有一个非常简单的应用程序,它通过蓝牙连接读取数据并更新页面上的文本字符串。所有更新都通过计时器正常工作,但是当我们切换到应用程序中的其他页面并返回主页时,更新停止工作。我们可以在文本字符串更新上设置一个断点,我们可以看到新值但它没有更新。

为什么当我们切换到不同的页面并返回时,它会停止更新?这是一个简单的标签,它在 UI 中已更新?

using System; 
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Plugin.BLE;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace Custom_TestAppHarness

  [XamlCompilation(XamlCompilationOptions.Compile)]
  public partial class Homepage : ContentPage, INotifyPropertyChanged
  

    public Homepage()
    
       

        InitializeComponent();
  
        // Start timer to update all the information on the home activity
        if (App._timeerhasstarted == false)
        
            App._timeerhasstarted = true;
            Device.StartTimer(TimeSpan.FromSeconds(5), () =>
            
                Task.Run(() =>
                
                    testcall();
                );
                return true; //use this to run continuously 
            );
        

    

    void testcall()
    
        Device.BeginInvokeOnMainThread(async () =>
        
            BTTextStatus.Text = App._vehiclefuellevel.ToString();

        );

    

     protected override void OnAppearing()
     
        base.OnAppearing();
        BTTextStatus.Text = App._vehiclefuellevel.ToString();

    



标签的 XML 代码

 <Label 
 x:Name = "BTTextStatus"
 Grid.Row="2"
 Grid.Column="0"
 Grid.ColumnSpan="6"
 HorizontalOptions="CenterAndExpand"
 VerticalOptions="CenterAndExpand"
 TextColor="#cccccc"
 FontSize="Medium"/>

【问题讨论】:

change to a different activity 您的意思是导航到其他页面吗?什么时候回到HomepageLabel这个内容不能改吗?我用你的代码写了一个演示,它可以正常工作(我在page1中更改了主页的内容),这里是运行GIF。 imgur.com/a/2PAEt6j 是的,当我们切换到不同的页面时,我们无法更新标签,即加载应用程序,出现主屏幕,读取 BT 数据,我们可以使用计时器更新标签。但是当我们切换到不同的页面然后返回主页时,我们无法更新标签。非常感谢您测试我的代码,奇怪的是它完全可以在您的演示中运行。这真的很奇怪,但在切换到其他页面时它会停止工作。 你可以创建一个静态数据,然后在其他页面更新`App._vehiclefuellevel.`,如果成功了? 【参考方案1】:

解决方法是从 xaml 中移动组件并将它们添加到 .cs 文件中,以便在页面重新加载时再次引用这些组件。这是标签组件的示例,您需要在 xaml 网格布局中添加引用。

        MainGrid.Children.Add(lblText = new Label()
        

            TextColor = Color.FromHex("#cccccc"),
            FontSize = Device.GetNamedSize(NamedSize.Medium, typeof(Label)),
            HorizontalOptions = LayoutOptions.CenterAndExpand,
            VerticalOptions = LayoutOptions.CenterAndExpand,

        , 0, 2);

        Grid.SetColumnSpan(lblText, 6);

在 xaml 代码中添加 x:name 引用,以便在我们重新加载页面时插入组件

      <Grid x:Name="MainGrid" HorizontalOptions="CenterAndExpand" RowSpacing="0" ColumnSpacing="0">

【讨论】:

以上是关于xamarin 更新标签被更改为不同的活动而被杀死的主要内容,如果未能解决你的问题,请参考以下文章

如何将标签更改为与在 Xamarin 表单上显示通知相同的布局?

如何终止 Xamarin 应用程序?

如果 Activity 被销毁,我可以从 Activity 调用静态方法吗?

容器因超出内存限制而被 YARN 杀死。使用了 14.8 GB 的 6 GB 物理内存

在 Xamarin.Forms 中将默认的深色 Android 主题更改为白色?

UCWA 用户进入“非活动状态”,并保持在那里直到端点被杀死