zoukankan      html  css  js  c++  java
  • 安卓基础(LiveData DataBinding)

    昨天因为有点事情,没有及时发表博客,昨天学习了LiveData和DataBinding,LiveData属于jetpack中的框架里面的,DataBinding可以进行数据绑定。

    我分别利用这两部分知识做了一个实例,可以进行对比一下。

    LiveData:

    java/MainAcitivity:

    package com.example.livedatetest;
    
    import android.arch.lifecycle.Observer;
    import android.arch.lifecycle.ViewModelProvider;
    import android.arch.lifecycle.ViewModelProviders;
    import android.support.annotation.Nullable;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.view.WindowInsets;
    import android.widget.ImageButton;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
     ViewModelWithLiveDate viewModelWithLiveDate;
     ImageButton like,dislike;
     TextView textView;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            like =findViewById(R.id.imageButton);
            dislike = findViewById(R.id.imageButton2);
            textView = findViewById(R.id.textView);
           viewModelWithLiveDate = ViewModelProviders.of(this).get(ViewModelWithLiveDate.class);
           viewModelWithLiveDate.getLikenumber().observe(this, new Observer<Integer>() {
               @Override
               public void onChanged(@Nullable Integer integer) {
                   textView.setText(String.valueOf(integer));
               }
           });
       like.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               viewModelWithLiveDate.addnumber(1);
           }
       });
       dislike.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
           viewModelWithLiveDate.addnumber(-1);
           }
       });
        }
    }

    java/ViewModelWithLiveData

    package com.example.livedatetest;
    
    import android.arch.lifecycle.MutableLiveData;
    import android.arch.lifecycle.ViewModel;
    
    public class ViewModelWithLiveDate extends ViewModel {
        private MutableLiveData<Integer> likenumber;
    
        public MutableLiveData<Integer> getLikenumber() {
            if(likenumber == null){
                likenumber = new MutableLiveData<>();
                likenumber.setValue(0);
            }
            return likenumber;
        }
        public void addnumber(int n){
            likenumber.setValue(likenumber.getValue() + n);
        }
    }

    activity_main.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout 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"
        android:id="@+id/dislike"
        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:text="@string/textview"
            android:textSize="36sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.471"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.149" />
    
        <ImageButton
            android:id="@+id/imageButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:contentDescription="@string/Like"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.201"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.48"
            app:srcCompat="@drawable/ic_thumb_up_black_24dp" />
    
        <ImageButton
            android:id="@+id/imageButton2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:contentDescription="@string/dislike"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.845"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.481"
            app:srcCompat="@drawable/ic_thumb_down_black_24dp" />
    </android.support.constraint.ConstraintLayout>

    再运用上Databinding:

    java/MainAcitivity:

    package com.example.datebinding;
    
    import android.arch.lifecycle.Observer;
    import android.arch.lifecycle.ViewModelProvider;
    import android.arch.lifecycle.ViewModelProviders;
    import android.databinding.DataBindingComponent;
    import android.databinding.DataBindingUtil;
    import android.support.annotation.Nullable;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    
    import com.example.datebinding.databinding.ActivityMainBinding;
    
    public class MainActivity extends AppCompatActivity {
    MyViewModel myViewModel;
    ActivityMainBinding binding;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
         binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
         myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
         binding.setData(myViewModel);
         binding.setLifecycleOwner(this);
    
        }
    }

    java/MyviewModel

    package com.example.livedatetest;
    
            import android.arch.lifecycle.MutableLiveData;
            import android.arch.lifecycle.ViewModel;
    
    public class ViewModelWithLiveDate extends ViewModel {
        private MutableLiveData<Integer> likenumber;
    
        public MutableLiveData<Integer> getLikenumber() {
            if(likenumber == null){
                likenumber = new MutableLiveData<>();
                likenumber.setValue(0);
            }
            return likenumber;
        }
        public void addnumber(int n){
            likenumber.setValue(likenumber.getValue() + n);
        }
    }

    acitivity_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.datebinding.MyViewModel" />
        </data>
    
        <android.support.constraint.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scrollbarSize="50dp"
            tools:context=".MainActivity">
    
            <TextView
                android:id="@+id/textView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:contentDescription="@string/textview"
                android:text="@{String.valueOf(data.like)}"
                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.161" />
    
            <ImageButton
                android:id="@+id/imageButton"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:contentDescription="@string/like"
                android:onClick="@{()->data.addnumber()}"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.204"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintVertical_bias="0.421"
                app:srcCompat="@drawable/ic_thumb_up_black_24dp"
                />
    
            <ImageButton
                android:id="@+id/imageButton3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:contentDescription="@string/dislike"
                android:onClick="@{()->data.cutnumber()}"
                app:layout_constraintBottom_toBottomOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintHorizontal_bias="0.872"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintVertical_bias="0.421"
                app:srcCompat="@drawable/ic_thumb_down_black_24dp" />
    
        </android.support.constraint.ConstraintLayout>
    </layout>

    界面截图:点点赞按钮图片就加一,点另一个加一。

  • 相关阅读:
    LRESULT CALLBACK WndProc 窗口程序的 重点
    vs2012打开低版本项目时 出现vs2012警告未能加载包“visual c++ package 解决办法
    const char*, char const*, char*const的区别
    js手机短信按钮倒计时
    控件案例
    laydate.js时间选择
    jquery.reveal弹出框
    表格内容控制(换行、不换行、隐藏)
    sql 把特定数据排在最前面
    jquery选择器(可见对象,不可见对象) +判断,对象(逆序)
  • 原文地址:https://www.cnblogs.com/yangxionghao/p/12296293.html
Copyright © 2011-2022 走看看