首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xamarin Android Refresh片段

Xamarin Android Refresh片段
EN

Stack Overflow用户
提问于 2017-08-06 11:08:57
回答 1查看 1.7K关注 0票数 0

我已经在官方论坛上问过这个问题了,但还没有收到答复。

我目前正在努力实现我的“智能家居”项目,通过使用我的智能手机控制几种设备(灯光、百叶窗、门、车库)。我用UDP数据包控制我的设备。

现在,我尝试从我的Arduino接收一个UDP数据包,以检查设备(例如,灯光)是开着还是关着。为此,我使用了一个Udplistener:

代码语言:javascript
复制
class UdpListener
        {
            private readonly UdpClient _udpClient = new UdpClient(4210);

            public async void StartListening()
            {
                while (true)
                {
                    var result = await _udpClient.ReceiveAsync();
                    var message = Encoding.ASCII.GetString(result.Buffer);

                    if (message.Contains("1"))
                    {
                        Licht.GlobalVariables.lampe1 = "1";
                    }
                    else
                    {
                        Licht.GlobalVariables.lampe1 = "0";
                    }
                }

            }

          }

当我收到正确的答案时,我将一个指示器设置为可见(在onCreateView中),这样我就可以在应用程序中看到是否有灯开/关。但我遇到的问题是:只有在重新加载片段(因为接收UDP数据包需要一段时间)时,指示符才是可见的。

一旦我收到UDP的答案,有没有办法强制对我当前的片段(视图)进行“刷新”?我发现的所有代码都没有被接受。

例如,这个片段:

代码语言:javascript
复制
// Reload current fragment
Fragment frg = null;
frg = getSupportFragmentManager().findFragmentByTag("Your_Fragment_TAG");
final FragmentTransaction ft = 
getSupportFragmentManager().beginTransaction();
ft.detach(frg);
ft.attach(frg);
ft.commit();
EN

回答 1

Stack Overflow用户

发布于 2017-08-07 23:16:25

一旦我收到UDP的答案,有没有办法强制对我当前的片段(视图)进行“刷新”?

片段在onCreateView()方法上重新构建它的onCreateView(),这在创建或重新创建片段时发生。

您必须实现自己的updateUI方法,或者指定哪些元素以及它们应该如何更新。您可以在您的BroadcastReceiver中注册一个Fragement

  1. 在您的BroadcastReceiver中注册Fragment: MyBroadcastReceiver mBroadcastReceiver =新MyBroadcastReceiver();IntentFilter intentFilter =新IntentFilter();intentFilter.AddAction("com.test.demo");context.RegisterReceiver(mBroadcastReceiver,intentFilter);
  2. 一旦收到UDP答复,就可以发送一个BroadcastReceiver: 意图=新意图();intent.SetAction("com.test.lizi");intent.PutExtra(“名称”,"ET");context.SendBroadcast(意图);
  3. 更新您的Fragment: 公共类MyBroadcastReceiver : BroadcastReceiver {公共覆盖无效OnReceive(上下文上下文,意图意图){updateUI(意图);//调用函数}

如果这还不够,您可以使用相同的片段替换片段,迫使它调用onCreateView()方法,如下所示:

代码语言:javascript
复制
FragmentTransaction ft = this.FragmentManager.BeginTransaction();
ft.Replace(Resource.Id.your_fragment_container, yourFragmentInstance);
ft.Commit();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45531388

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档