0

我有一個類WifiManager,它擁有一個布爾值,代表wifi連接wifi斷開連接android-數據綁定到字段,顯示匹配圖標

布爾字段得到更新,我在該類中有一個broadcastReceiver

private BroadcastReceiver wifiScanReceiver; 

private boolean isWifiConnected = false; 

wifiScanReceiver = new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context c, Intent intent) { 
        // Wifi connected/disconnected 
        NetworkInfo nwInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 
        final WifiInfo connectionInfo = wifiManager.getConnectionInfo(); 
        if (nwInfo.getState().equals(NetworkInfo.State.CONNECTED)) { 
         // wifi connect 
         isWifiConnected = true; 
        } else { 
         // wifi disconnected 
         isWifiConnected = false; 
        } 
       } 
     }; 

     context.registerReceiver(wifiScanReceiver, wifiIntentFilter); 

在我MainActivity我有一個WifiManager領域,我要的是做數據綁定即會變化基於布爾值菜單項中的一個 - >如果isWifiConnected=false集圖標@drawalbe/xxx ,如果isWifiConnected=true將圖標設置爲@drawalbe/yyy

意義 - 具有排序一個「收聽」到isWifiConnected值的變化,並基於該 - 設置MenuItem的圖標中的一個來要麼@drawalbe/xxx@drawalbe/yyy

我知道有噸的方式做到這一點,從BroadcastReceiver廣播的Intent並抓住它在MainActivity只是有一個Handler運行和檢查isWifiConnected每3秒..

我是什麼真的尋找是數據綁定與轉換器,就像你會在做一個MVVM項目

在android中有這樣的事情嗎?

回答

1

我假設你知道關於android數據綁定,你只是問如何做這個特定的情況。如果不是,這裏是android data binding guide

您將需要一種方法來觀察布爾值,以便UI可以保持更新。最簡單的方法是讓你的模型對象的ObservableBoolean領域:

public class ViewModel { 
    public final ObservableBoolean isWifiConnected = new ObservableBoolean(); 
    // other things you want to bind to your layout... 
} 

當您創建綁定,還必須指定型號:

public void onCreate(Bundle icicle) { 
    ActivityMainBinding binding = 
     DataBindingUtil.setContentView(this, R.layout.activity_main); 
    this.model = new ViewModel(); 
    binding.setModel(this.model); 
} 

而當你接收到廣播,你更新模型:

wifiScanReceiver = new BroadcastReceiver() { 
     //... 
     model.isWifiConnected.set(newValue); 
     //... 
    }; 

而且你的佈局將是這樣的:

<layout ...> 
    <data> 
     <variable name="model" type="com.example.ViewModel"/> 
    </data> 
    <!-- rest of layout --> 
    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@{model.isWifiConnected ? @drawable/xxx : @drawable/yyy}"/> 
</layout> 

如果您跟蹤綁定並直接在其上設置變量,您也可以避免使用模型類。在這種情況下,你有一個變量:

<variable name="isWifiConnected" type="boolean"/> 

和你的廣播接收器將設置值:

binding.setIsWifiConnected(newValue); 
相關問題