使用dataBinding,真正不用findViewById

1.在工程的build.gradle文件的android节点添加dataBinding,属性值为:enabled = true
如下:
android {
   ......

  //AS 1.3才可以使用
 dataBinding {
        enabled = true
    }
   ......
 
}

2.布局文件中声明:

    
        
    

    

        

            

                

                    

                

                

                    

                
                
这里需要注意的是布局文件是以:layout作为根节点。其中data节点就是我们需要绑定的数据,data节点中variable就是我们具体使用到的Model,name是我们自己定义的变量名(说白了就是看可以随便取名字),
type就是我们需要绑定的具体的类(这里可不能随便写)。

3.绑定数据:
public class RegisterFragment extends BaseFragment implements LoginContract.RegisterFragmentView {

    private final int RETRUN_LOGIN = 1;
    private LoginContract.RegisterFragmentPresenter lrp;

    private Button retrunLogin;
    private EditText registerUserName;
    private EditText registerPassword;
    private EditText registerConfirmPassword;
    private Button registerButton;


    private FragmentRegisterBinding fragmentRegisterBinding;

    @Override
    public int getLayoutId() {
        return R.layout.fragment_register;
    }

    @Override
    public void initViews() {
        fragmentRegisterBinding = FragmentRegisterBinding.bind(root);
        User user = new User("tianluhua", "123456", "123456", true);
        fragmentRegisterBinding.setUser(user);

        //retrunLogin = (Button) root.findViewById(R.id.regiter_return_login);
        //registerUserName = (EditText) root.findViewById(R.id.register_email);
        //registerPassword = (EditText) root.findViewById(R.id.register_password);
        //registerConfirmPassword = (EditText) root.findViewById(R.id.register_confirm_password);
        //registerButton = (Button) root.findViewById(R.id.register_button);
    }

    @Override
    public void initEvents() {
        lrp = new RegisterPresenter(this, getActivity());
        retrunLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                RxBus.getInstance().send(RETRUN_LOGIN);
            }
        });

    }
}
3.1其中FragmentRegisterBinding这个类是系统根据上一步的XMl布局文件自动生成的,名字的规则是对应布局文件的名字(有下划线的话去掉下划线),
接下来就用这个类的静态方法得到对象:
 fragmentRegisterBinding = FragmentRegisterBinding.bind(root);
这里本来该将刚刚的布局文件用LayoutInflate实例化成一个View传进去的,我这里在Fragment的父类中已经将布局文件实例化好了,名字就叫root而已。
3.2接下来就是设置Model数据了:
User user = new User("tianluhua", "123456", "123456", true);
        fragmentRegisterBinding.setUser(user);
new一个User的实例,设置给fragmentRegisterBinding。

效果如下:
使用dataBinding,真正不用findViewById_第1张图片




你可能感兴趣的:(MVVM)