Android Studio实现无需定义变量进行界面的操作
初次见面,我加入了csdn这个大家庭,废话不多说了,我来献丑了
菜鸡货文,建议看看
文章目录
Android Studio实现无需定义变量进行界面的操作
前言
一 、不变的代码图
二、改进前代码图
三、改进后代码图
四、效果图
五、进行文件配置
六、界面代码的操作
七、源码
总结
**
前言
代码很简单,初学者可以看看哦,开始吧!
文章最后有源码哦
**
**
说明一下哦,效果图都是一样的 只是改进之后的代码更简单了
**
一 .不变的代码图
这是一个ViewModel的Java类
**
二. 改进前代码图
Activity中的代码块 界面代码太简单了,这里就不添加了
和上面的图是一起的,因为截屏不能截到全部,所以就分开了
**
三. 改进后代码图
这里的DataBinding是Android Studio的一种架构 用了架构思想,所以代码变得更少了,但界面的功能比较多时,这种架构思想就体现出他的价值了
**
四. 效果图
我已经实现加法,加到七了,而且你旋转屏幕的时候,Text View里面的内容也不会消失 我这里只实现了一个按钮了,其实两个和一个按钮区别不大,功能 能实现就好
**
最重要的地方来了改进后的界面代码发生了变化,这才是重点
**
五. 进行文件配置
1.在Android Studio的Gradle Scripts目录下 找到build.gradle这个文件,然后在defaultConfig下面加入一个配置文件
如:加入我加粗的代码,当日志里面出现成功的时候就表示配置成功了。
defaultConfig {
applicationId "com.example.getpack"
minSdkVersion 28
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
** dataBinding{
** enabled true
** }
}
**
**
六. 界面代码的操作
**
1.点击灯泡 把data控件显示出来 然后再点Convert to data…
2.点了之后就会出现data控件了 如
3.文本控件与按钮控件的操作
我们这些小菜鸡平时都喜欢给每个控件一个id,以及名称,然后再到activity中去进行实例化变量,再通过控件的id进行操作,我们这次改变就是把这个省略了,直接在界面中进行值的交互。
TextView中
android:text="@{String.valueOf(data.number)}" //这里的text直接调用data里面的number属性,实现了值得可变化 因为这里的nubmber为integer的类型 所以要进行字符串的转换
Button中
android:onClick="@{()->data.add()}"//这里用到了onClick这个点击事件,后面调用了data里面的add方法实现数的加法操作
上面用到的data在activity里面进行了设置 就等同于data==Viewmodel这里的Java操作类
在这里提醒一下大家,最好不要把Activity的名称与类目相同,因为这样大部分都会报错的,小编就尝试了一下,后悔莫及啊
**
七.源码
1.改变前源码
Livedata.java
public class LivaData extends AppCompatActivity {
private TextView mTextView5;
private ImageButton mImageButton;
private ImageButton mImageButton2;
MyViewModel myViewModel;
//一个可以更好的对数据进行操作的控件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_liva_data);
initView();
setData();
setListener();
}
private void setListener() {
mImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
myViewModel.addLikeNumber(1);//调用方法进行加一
}
});
mImageButton2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
myViewModel.addLikeNumber(-1);
}
});
}
private void setData() {
myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
myViewModel.getLinkedNumber().observe(this, new Observer<Integer>() {
@Override
public void onChanged(Integer integer) {
mTextView5.setText(String.valueOf(integer));
}
});
}
private void initView() {
mTextView5 = (TextView) findViewById(R.id.textView5);
mImageButton = (ImageButton) findViewById(R.id.imageButton);
mImageButton2 = (ImageButton) findViewById(R.id.imageButton2);
}
}
2.改变后源码
ActivityBinding.java
public class ActivityBinding extends AppCompatActivity {
MyViewModel1 myViewModel1;
ActivityActivityBindingBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_activity_binding);
myViewModel1 = ViewModelProviders.of(this).get(MyViewModel1.class);//判定ViewModel
binding.setData(myViewModel1);
binding.setLifecycleOwner(this);//设置数据
}
}
ViewModel.java
public class MyViewModel extends ViewModel {
public int number = 0;
private MutableLiveData LinkedNumber;//声明为Integer的LinkedNumber变量
public MutableLiveData<Integer> getLinkedNumber() {//得到数值
if (LinkedNumber==null){//判断是否为空
LinkedNumber = new MutableLiveData<>();//为空就实例化对象 对它进行赋值
LinkedNumber.setValue(0);
}
return LinkedNumber;
}
public void addLikeNumber(int n){
LinkedNumber.setValue(LinkedNumber.getValue() + n);
}
}
**
总结
希望这篇文章能对你们有所帮助,欢迎留言,谢谢。
**