DataBinding使用の詳細

9000 ワード

コンフィギュレーション
  • Moduleのbuild.gradle androidモジュールには、
    android {
     dataBinding {
        enabled = true
     }
    }
    
  • の構成が追加されています.
    レイアウト
    
    
        
        
        
        
             
             
             
             
                    
            
        
    
        
    
            
    
            
            
        
    
    

    エンティティークラス
    public class UserBean {
        private String name; //  
        private int age; //  
    
        public UserBean(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    }
    

    使用
    public class MainActivity extends Activity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            ActivityMainBinding binding = DataBindingUtil.setContentView(this,R.layout.activity_main);                  
            UserBean userBean = new UserBean ("Luuren", "26");
            binding.setUser(userBean );
        }
    }
    

    BindingAdapter注記カスタム属性の設定
  • この注釈を使用して、ImageViewが直接ネットワークピクチャをロードするように設定するなど、コントロールのプロパティをカスタマイズできます(もちろんGlideなどのネットワークピクチャロードフレームワークの助けを借りなければなりません.詳細はコードを参照してください).
  • public class ImageHelper {
    
        /**
         * 1.    ,         
         * 2.  @BindingAdapter            ,imageUrl       ,
         *  ImageView   imageUrl   ,     loadImage  ,
         *
         * @param imageView ImageView
         * @param url           
         */
        @BindingAdapter({"imageUrl"})
        public static void loadImage(ImageView imageView, String url) {
            Glide.with(imageView.getContext()).load(url)
                    .placeholder(R.mipmap.fruit)
                    .error(R.mipmap.fruit)
                    .into(imageView);
        }
        /**
                     
        */
        @BindingAdapter({"imageUrl", "placeHolder",error"})
        public static void loadImage(ImageView view, String url, Drawable holderDrawable,Drawable errorDrawable) {
             Glide.with(imageView.getContext())  
                        .load(url)  
                        .placeholder(holderDrawable)  
                        .error(errorDrawable)  
                        .into(imageView);
        }
    }
    
  • は、
  • を使用します.
    
    
        
            
            
        
    
        
    
            
            
        
    
    

    データオブジェクト(Data Objects)
  • いわゆる双方向バインディングは、実際にはnotifyDatasetChangedのような操作であり、具体的にはコード:
  • public class ContentBean extends BaseObservable {
        
        //BR            ,    R.java   ,  @Bindable     getter      BR       entry,   
        //        ,                  。     notifyPropertyChanged(BR.firstName)      BR.firstName    entry          ,     UI。
    
        private String content; //  
    
        public DoubleBindBean(String content) {
            this.content = content;
        }
    
        @Bindable
        public String getContent() {
            return content;
        }
    
    
        public void setContent(String content) {
            this.content = content;
            notifyPropertyChanged(BR.content); //           ,  UI  
        }
    }
    
  • xml
  • 
    
    
        
            
    
            
    
        
    
        
    
            
    
            
    • 这样之后只需要操作数据就好了,不用关心UI的变化问题
    • ObservableFields : 如果想要省时,或者数据类的字段很少的话,可以使用 ObservableField 以及它的派生 ObservableBoolean、 ObservableByte ObservableChar、ObservableShort、ObservableInt、ObservableLong、ObservableFloat、ObservableDouble、 ObservableParcelable 等。
    public class ContentBean {
        //     public
        public final ObservableField username = new ObservableField<>();
    }
    
  • Observable Collections:ObservableField,ObservableBoolean,ObservableIntなどの基礎変数タイプをサポートするほか、ObservableArrayMap,ObservableArrayListなどの集合フレームワークもサポートされるのは当然です.通常のMap、Listとほぼ同じ
  • を使用
    
    
    
        
            
    
            
    
            
    
        
    
        
    
            
    
            
    
            

    View with ID

    • 如果我们需要在Activity中获取某个View来进行一些操作,那该怎么办呢?
    
       
           
       
       
           
       
    
    
    public class MainActivity extends AppCompatActivity {  
    
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            ActivityMainBinding  binding = DataBindingUtil.setContentView(this, R.layout.activity_main);   
                    
            binding.userName.setText("content")
        }  
    }
    
  • は十分ではないかもしれませんが、一時的に十分で、記録になります.