2017-08-06 14 views
0

私は公式フォーラムですでにこれを尋ねたが、まだ返事を受信しませんでした。Xamarin Androidの最新の情報に更新断片

私は現在、XamarinのAndroidを使用して、私のスマートフォンで複数のデバイス(光、シャッター、ドア、ガレージ)を制御することにより、私の「スマートホーム」プロジェクトを実現しようとしています。 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(); 

答えて

1

私はUDPの答えを受けたら、私の現在の断片(ビュー)の「リフレッシュ」を強制する方法はありますか?

フラグメントは、それがonCreateView()法上のUIだ再構築、およびフラグメントが作成または再作成されたときに発生します。

独自のupdateUIメソッドを実装する必要がありますまたはどこ彼らは更新する必要がありますどのような要素と方法を指定します。 Fragementに登録番号BroadcastReceiverを使用できます。

  1. あなたFragmentBroadcastReceiverを登録します。

    MyBroadcastReceiver mBroadcastReceiver = new MyBroadcastReceiver(); 
    IntentFilter intentFilter = new IntentFilter(); 
    intentFilter.AddAction("com.test.demo"); 
    context.RegisterReceiver(mBroadcastReceiver, intentFilter); 
    
  2. あなたがUDP答えを受け取ったら、あなたはBroadcastReceiverを送ることができます:

    Intent intent = new Intent(); 
    intent.SetAction("com.test.lizi"); 
    intent.PutExtra("name", "ET"); 
    context.SendBroadcast(intent); 
    
  3. あなたFragmentを更新します。

    public class MyBroadcastReceiver : BroadcastReceiver 
    { 
        public override void OnReceive(Context context, Intent intent) 
        { 
         updateUI(intent); //calling function  
        } 
    } 
    

これが十分でない場合は、このようなonCreateView()メソッドを呼び出すためにそれを強制的に同じものでフラグメントを交換するような何か行うことができます:

FragmentTransaction ft = this.FragmentManager.BeginTransaction(); 
ft.Replace(Resource.Id.your_fragment_container, yourFragmentInstance); 
ft.Commit(); 
+0

@Peterパンは、あなたの問題を解決してきましたか? –

関連する問題