Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android-数据绑定到字段,显示匹配图标_Android_Data Binding_Listener_Android Broadcastreceiver_Android Databinding - Fatal编程技术网

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?