android-数据绑定到字段,显示匹配图标
我有一个类android-数据绑定到字段,显示匹配图标,android,data-binding,listener,android-broadcastreceiver,android-databinding,Android,Data Binding,Listener,Android Broadcastreceiver,Android Databinding,我有一个类WifiManager,它包含一个布尔值,表示wifi已连接或wifi已断开 布尔字段将使用该类中的broadcastReceiver更新 private BroadcastReceiver wifiScanReceiver; private boolean isWifiConnected = false; wifiScanReceiver = new BroadcastReceiver() { @Override public vo
WifiManager
,它包含一个布尔值,表示wifi已连接或wifi已断开
布尔字段将使用该类中的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);
在我的main活动中
有一个WifiManager
字段,我想做的是数据绑定,它将根据布尔值更改其中一个菜单项->如果isWifiConnected=false
将图标设置为@drawalbe/xxx
,如果isWifiConnected=true
将图标设置为@drawalbe/yyy
含义-对值的更改具有某种“侦听器”连接,并基于此-将菜单项的图标之一设置为@drawalbe/xxx
或@drawalbe/yyy
我知道有很多方法可以做到这一点,从在BroadcastReceiver
中广播Intent
到在main活动中捕捉它,再到每3秒钟运行一个Handler
并检查isWifiConnected
我真正想要的是一种带有转换器的数据绑定,就像你在MVVM项目中所做的那样
android中有这样的东西吗?我想你知道android数据绑定,你只是在问如何在这种特定情况下进行绑定。如果没有,这里是答案
您需要一种观察布尔值的方法,以便UI可以保持更新。最简单的方法是使其成为模型对象的ObservableBolean字段:
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);
//...
};
当您收到广播时,您将更新模型:
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>
我假设您了解android数据绑定,您只是在问如何针对这种特定情况进行绑定。如果没有,这里是答案
您需要一种观察布尔值的方法,以便UI可以保持更新。最简单的方法是使其成为模型对象的ObservableBolean字段:
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);
//...
};
当您收到广播时,您将更新模型:
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>
我有个问题。我必须在onHandleMessage方法中检查BroadcastReceiver中的模型是否不为null吗?我有一个问题。我是否必须在onHandleMessage方法中检查BroadcastReceiver中的模型是否不为null?