【自学Android】使用DataBinding,ViewModel,LiveData完成点赞小功能
16lz
2021-01-23
使用DataBinding,ViewModel,LiveData完成点赞小功能
致自己的Android自学开发笔记!点击获取源码
1.build.gradle
apply plugin: 'com.android.application'android { compileSdkVersion 28 defaultConfig { applicationId "com.example.clickzan" minSdkVersion 19 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" android.defaultConfig.vectorDrawables.useSupportLibrary = true dataBinding { enabled true } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } }}dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation 'androidx.appcompat:appcompat:1.0.2' implementation 'androidx.constraintlayout:constraintlayout:1.1.3' testImplementation 'junit:junit:4.12' androidTestImplementation 'androidx.test:runner:1.2.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'}
2.MyViewModel.java
package com.example.clickzan;import androidx.lifecycle.MutableLiveData;import androidx.lifecycle.ViewModel;public class MyViewModel extends ViewModel { private MutableLiveData<Integer> mutableLiveData; public MutableLiveData<Integer> getMutableLiveData() { if (mutableLiveData==null) { mutableLiveData = new MutableLiveData<>(); mutableLiveData.setValue(0); } return mutableLiveData; } public void addCount(){ mutableLiveData.setValue(mutableLiveData.getValue()+1); }}
3.activity_main.xml
<?xml version="1.0" encoding="utf-8"?><layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> <data> <variable name="data" type="com.example.clickzan.MyViewModel" /> data> <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginEnd="8dp" android:layout_marginBottom="8dp" android:text="@{String.valueOf(data.mutableLiveData)}" android:textSize="36sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.498" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.149" /> <ImageView android:id="@+id/imageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:layout_marginEnd="8dp" android:layout_marginBottom="8dp" android:contentDescription="@string/img_button_msg" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.498" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.353" app:srcCompat="@drawable/ic_thumb_up_black_24dp" android:onClick="@{()->data.addCount()}"/> androidx.constraintlayout.widget.ConstraintLayout>layout>
4.MainActivity.java
package com.example.clickzan;import androidx.appcompat.app.AppCompatActivity;import androidx.databinding.DataBindingUtil;import androidx.lifecycle.ViewModelProviders;import android.os.Bundle;import com.example.clickzan.databinding.ActivityMainBinding;public class MainActivity extends AppCompatActivity { MyViewModel myViewModel; ActivityMainBinding activityMainBinding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); activityMainBinding = DataBindingUtil.setContentView(this,R.layout.activity_main); myViewModel = ViewModelProviders.of(this).get(MyViewModel.class); activityMainBinding.setData(myViewModel); activityMainBinding.setLifecycleOwner(this); }}
5.效果图
功能:点赞数累加