我已经在官方论坛上问过这个问题了,但还没有收到答复。
我目前正在努力实现我的“智能家居”项目,通过使用我的智能手机控制几种设备(灯光、百叶窗、门、车库)。我用UDP数据包控制我的设备。
现在,我尝试从我的Arduino接收一个UDP数据包,以检查设备(例如,灯光)是开着还是关着。为此,我使用了一个Udplistener:
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的答案,有没有办法强制对我当前的片段(视图)进行“刷新”?我发现的所有代码都没有被接受。
例如,这个片段:
// 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();发布于 2017-08-07 23:16:25
一旦我收到UDP的答案,有没有办法强制对我当前的片段(视图)进行“刷新”?
片段在onCreateView()方法上重新构建它的onCreateView(),这在创建或重新创建片段时发生。
您必须实现自己的updateUI方法,或者指定哪些元素以及它们应该如何更新。您可以在您的BroadcastReceiver中注册一个Fragement。
BroadcastReceiver中注册Fragment:
MyBroadcastReceiver mBroadcastReceiver =新MyBroadcastReceiver();IntentFilter intentFilter =新IntentFilter();intentFilter.AddAction("com.test.demo");context.RegisterReceiver(mBroadcastReceiver,intentFilter);UDP答复,就可以发送一个BroadcastReceiver:
意图=新意图();intent.SetAction("com.test.lizi");intent.PutExtra(“名称”,"ET");context.SendBroadcast(意图);Fragment:
公共类MyBroadcastReceiver : BroadcastReceiver {公共覆盖无效OnReceive(上下文上下文,意图意图){updateUI(意图);//调用函数}如果这还不够,您可以使用相同的片段替换片段,迫使它调用onCreateView()方法,如下所示:
FragmentTransaction ft = this.FragmentManager.BeginTransaction();
ft.Replace(Resource.Id.your_fragment_container, yourFragmentInstance);
ft.Commit();https://stackoverflow.com/questions/45531388
复制相似问题