• 二月四日


      今天继续进行了一些 安卓的学习就是如果你关闭后台后继续能够保存数据主要是看关于ViewModel,Lifedata ,还有今天学的Databinding的学习

    例子:主要是在后台加减以后再重新开机后不会失去数据

    代码:

    package com.eb.myapplicationsd;
    
    import androidx.appcompat.app.AppCompatActivity;
    import androidx.databinding.DataBindingUtil;
    import androidx.lifecycle.SavedStateViewModelFactory;
    import androidx.lifecycle.ViewModelProvider;
    import androidx.lifecycle.ViewModelProviders;
    
    import android.os.Bundle;
    
    import com.eb.myapplicationsd.databinding.ActivityMainBinding;
    
    public class MainActivity extends AppCompatActivity {
            MyViewModel myViewModel;
            ActivityMainBinding binding;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            binding=DataBindingUtil.setContentView(this,R.layout.activity_main);
             myViewModel = ViewModelProviders.of(this, new SavedStateViewModelFactory(getApplication(),this)).get(MyViewModel.class);
             binding.setData(myViewModel);
             binding.setLifecycleOwner(this);
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            myViewModel.save();
        }
    }
    

      

    package com.eb.myapplicationsd;
    
    import android.app.Application;
    import android.content.Context;
    import android.content.SharedPreferences;
    
    import androidx.annotation.NonNull;
    import androidx.lifecycle.AndroidViewModel;
    import androidx.lifecycle.LiveData;
    import androidx.lifecycle.SavedStateHandle;
    import androidx.lifecycle.ViewModel;
    
    public class MyViewModel extends AndroidViewModel {
        SavedStateHandle savedStateHandle;
        String key=getApplication().getResources().getString(R.string.data_key);
        String shpname=getApplication().getResources().getString(R.string.shp_name);
        public MyViewModel(@NonNull Application application,SavedStateHandle savedStateHandle) {
            super(application);
            this.savedStateHandle=savedStateHandle;
            if(!savedStateHandle.contains(key))
            {
    
            }
        }
      public  LiveData<Integer>getNumber()
        {
            return savedStateHandle.getLiveData(key);
        }
        public void load()
        {
            SharedPreferences sharedPreferences=getApplication().getSharedPreferences(shpname, Context.MODE_PRIVATE);
            int x=sharedPreferences.getInt(key,0);
            savedStateHandle.set(key,x);
        }
        public void save()
        {
            SharedPreferences sharedPreferences=getApplication().getSharedPreferences(shpname,Context.MODE_PRIVATE);
            SharedPreferences.Editor editor=sharedPreferences.edit();
            editor.putInt(key,getNumber().getValue());
            editor.apply();
        }
        public void add(int x)
        {
            savedStateHandle.set(key,getNumber().getValue()+x);
        }
    }
    

      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.eb.myapplicationsd.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_marginTop="152dp"
                android:text="@{String.valueOf(data.getNumber())}"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />
    
            <Button
                android:id="@+id/button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginStart="73dp"
                android:layout_marginEnd="74dp"
                android:text="@string/Button_plue"
                android:onClick="@{()->data.add(1)}"
                app:layout_constraintBaseline_toBaselineOf="@+id/button2"
                app:layout_constraintEnd_toEndOf="@+id/textView"
                app:layout_constraintStart_toStartOf="parent" />
    
            <Button
                android:id="@+id/button2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="296dp"
                android:layout_marginEnd="56dp"
                android:onClick="@{()->data.add(-1)}"
    
                android:text="@string/Button_minus"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toTopOf="parent" />
        </androidx.constraintlayout.widget.ConstraintLayout>
    </layout>
    

      结果:

    重新关节后在开启

  • 相关阅读:
    大型网站技术架构(七)网站的可扩展性架构
    【Spark深入学习 -15】Spark Streaming前奏-Kafka初体验
    结合案例深入解析模板方法设计模式
    android开发之自定义View 详解 资料整理 小冰原创整理,原创作品。
    1309:【例1.6】回文数(Noip1999)
    jQuery dataTables四种数据来源[转]
    CYQ.Data 轻量数据层之路 使用篇-MProc 存储过程与SQL 视频[最后一集] H (二十八)
    CRM系统项目总结
    同源策略:JSONP和CORS
    forms表单与modelfrom使用
  • 原文地址:https://www.cnblogs.com/guziteng1/p/12261400.html
Copyright © 2020-2023  润新知