使用DataBinding,不需要再一个个findViewById了
1.在 build.gradel 中 添加下面语句
dataBinding{
enabled true
}
2.在 activity_main.xml 文件中 点小灯炮,自动生成 data 结点
3.在 MainActivity.java 中能得到一个新的类, ActivityMainBinding(此类取Activity名称,这个类不是固定的) ActivityMainBinding binding
4.对 绑定的实例 进行绑定 binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
5.然后在MainActivity.java 文件中,直接用 binding.控件名,进行访问控件,不需要再像之前一样,一个个定义控件变量了,也不需要一个个控件进行 findViewById() 了
6.之前的 setContentView(R.layout.activity_main); 这句方法也不需要写了,直接屏蔽掉
7.在 activity_main.xml 文件中,对控件进行数据回绑
在 结点中声明 数据变量,
在 textView 或 其他内容控件中,都可以使用 data 这个变量进行数据绑定
如:android:text="@{String.valueOf(data.number)}" 直接把 MyViewModel 中的 number 值绑定到控件上
android:onClick="@{()->data.add()}" 调用 MyViewModel 中的方法
1. ViewModel 类
package com.example.databinding;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;
public class MyViewModel extends ViewModel {
private MutableLiveData
public MutableLiveData
if(number==null)
{
number = new MutableLiveData<>();
number.setValue(0);
}
return number;
}
public void add(){
number.setValue(number.getValue()+1);
}
}
2.MainActivity 类
package com.example.databinding;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.ViewModelProviders;
import com.example.databinding.databinding.ActivityMainBinding;
public class MainActivity extends AppCompatActivity {
TextView textView;
Button button;
MyViewModel myViewModel;
ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/\*
改造步骤:使用DataBinding
1.在 build.gradel 中 添加下面语句
dataBinding{
enabled true
}
2.在 activity\_main.xml 文件中 点小灯炮,自动生成 data 结点
3.在 MainActivity.java 中能得到一个新的类, ActivityMainBinding(此类取Activity名称,这个类不是固定的) ActivityMainBinding binding
4.对 绑定的实例 进行绑定 binding = DataBindingUtil.setContentView(this,R.layout.activity\_main);
5.然后在MainActivity.java 文件中,直接用 binding.控件名,进行访问控件,不需要再像之前一样,一个个定义控件变量了,
也不需要一个个控件进行 findViewById() 了
6.之前的 setContentView(R.layout.activity\_main); 这句方法也不需要写了,直接屏蔽掉
7.在 activity\_main.xml 文件中,对控件进行数据回绑
<data>
<variable
name="data"
type="com.example.databinding.MyViewModel" />
</data>
在 <data> 结点中声明 数据变量,
在 textView 或 其他内容控件中,都可以使用 data 这个变量进行数据绑定
如:android:text="@{String.valueOf(data.number)}" 直接把 MyViewModel 中的 number 值绑定到控件上
android:onClick="@{()->data.add()}" 调用 MyViewModel 中的方法
\*/
//setContentView(R.layout.activity\_main);
binding = DataBindingUtil.setContentView(this,R.layout.activity\_main);
/\*
textView = findViewById(R.id.textView);
button = findViewById(R.id.button); \*/
myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
binding.setData(myViewModel); //监听用它来替换了
binding.setLifecycleOwner(this); //这句不能少,否则数据不显示
/\*
myViewModel.getNumber().observe(this, new Observer<Integer>() {
@Override
public void onChanged(Integer integer) {
binding.textView.setText(String.valueOf(integer));
}
});
binding.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
myViewModel.add();
}
});
\*/
}
}
手机扫一扫
移动阅读更方便
你可能感兴趣的文章