0

아이콘을 표시하는 필드에 바인딩 데이터는, I는 무선 하나가 또는 와이파이 단선 접속 나타내는 부울 값을 유지하는 클래스 WifiManager있다.로이드 - 정합

부울 필드는 해당 클래스에있는 broadcastReceiver으로 업데이트됩니다. 내 MainActivity에서

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); 

나는 WifiManager 필드가 있고, 내가 원하는 데이터를 결합하는 것입니다 그 것이다 변화 부울 값에 따라 메뉴 항목 중 하나 - @drawalbe/xxx에> 경우 isWifiConnected=false 설정 아이콘 , isWifiConnected=true의 경우 아이콘을 @drawalbe/yyy으로 설정하십시오. isWifiConnected 값의 변화에 ​​"청취자"의 종류를 가지고, 그 기반으로 - -

의미 @drawalbe/xxx 또는 @drawalbe/yyy 중 하나에 MenuItem의 아이콘 중 하나를 설정합니다.

은 내가 BroadcastReceiverIntent 방송에서, 그것을 단지 Handler 실행을 위해 MainActivity에 잡을 수있는 방법의 톤이 알고와 isWifiConnected 3 초마다 확인 ..

내가 무엇 실제로데이터 바인딩과 같습니다. 사용자가 MVVM 프로젝트에서와 같이 변환기를 사용합니다.

안드로이드에 그런 것이 있습니까?

답변

1

나는 당신이 안드로이드 데이터 바인딩에 대해 알고 있다고 가정하고,이 특별한 경우를 위해 어떻게해야하는지 묻습니다. 그렇지 않은 경우 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);