AndroidViewModel是ViewModel的一个子类,可以直接调用getApplication(),由此可以访问应用的全局资源

news/2024/10/18 9:24:47/

结合SharedPreferences实现保存数据

MainActivity.java

package com.tjjingpan.study.viewmodelshp;import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.SavedStateViewModelFactory;import android.os.Bundle;import com.tjjingpan.study.viewmodelshp.databinding.ActivityMainBinding;public class MainActivity extends AppCompatActivity {MyViewModel myViewModel;ActivityMainBinding binding;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//setContentView(R.layout.activity_main);binding = DataBindingUtil.setContentView(this, R.layout.activity_main);//myViewModel = new MyViewModel();//myViewModel.application= getApplication();//myViewModel.context = getApplicationContext();SavedStateViewModelFactory savedStateViewModelFactory = new SavedStateViewModelFactory(getApplication(), this);myViewModel = savedStateViewModelFactory.create(MyViewModel.class);binding.setData(myViewModel);binding.setLifecycleOwner(this);}@Overrideprotected void onPause() {super.onPause();myViewModel.save();}
}

MyViewModel.java

package com.tjjingpan.study.viewmodelshp;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;public class MyViewModel extends AndroidViewModel {private SavedStateHandle handle;private String key = getApplication().getResources().getString(R.string.data_key);private String shpName = getApplication().getResources().getString(R.string.shp_name);public MyViewModel(@NonNull Application application, SavedStateHandle handle) {super(application);this.handle = handle;//判断handle是否存在需要的数据,不存在,从SharedPreferences加载if (!handle.contains(key)) {load();}}public LiveData<Integer> getNumber() {return handle.getLiveData(key);}public void load() {SharedPreferences shp = getApplication().getSharedPreferences(shpName, Context.MODE_PRIVATE);int x = shp.getInt(key, 0);handle.set(key, x);}public void save() {SharedPreferences shp = getApplication().getSharedPreferences(shpName, Context.MODE_PRIVATE);SharedPreferences.Editor editor = shp.edit();editor.putInt(key, getNumber().getValue() == null ? 0 : getNumber().getValue());editor.apply();}public void add(int x) {handle.set(key, getNumber().getValue() == null ? 0 : getNumber().getValue() + x);//save();}//Application application;
//    Context context;
//
//    void foo(){
//    }
}

布局文件

<?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><variablename="data"type="com.tjjingpan.study.viewmodelshp.MyViewModel" /></data><androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@{String.valueOf(data.getNumber())}"android:textSize="34sp"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.07999998"/><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="@{()-> data.add(1)}"android:text="@string/button_plus"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.241"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="@{()-> data.add(-1)}"android:text="@string/button_minute"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.678"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /></androidx.constraintlayout.widget.ConstraintLayout>
</layout>

构建文件

plugins {id 'com.android.application'
}android {namespace 'com.tjjingpan.study.viewmodelshp'compileSdk 33defaultConfig {applicationId "com.tjjingpan.study.viewmodelshp"minSdk 23targetSdk 33versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"dataBinding.enabled = true}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}
}dependencies {implementation 'androidx.appcompat:appcompat:1.2.0'implementation 'com.google.android.material:material:1.3.0'implementation 'androidx.constraintlayout:constraintlayout:2.0.4'implementation 'androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.1'testImplementation 'junit:junit:4.+'androidTestImplementation 'androidx.test.ext:junit:1.1.2'androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}


http://www.ppmy.cn/news/665479.html

相关文章

Linux卸载OpenJDK

1、JDK版本 java -version2、查看当前系统OPENJDK rpm -qa | grep jdk3、卸载 sudo rpm -e --nodeps java-1.8.0-openjdk sudo rpm -e --nodeps java-1.8.0-openjdk-headless sudo rpm -e --nodeps java-1.8.0-openjdk-devel sudo rpm -e --nodeps copy-jdk-configs4、其他 …

快速测试网速软件,‎App Store 上的“测网速大师 - 一键测网速”

测网速大师是一款简单易用且精准测试的测网速工具&#xff0c;一键解决3G,4G,WIFI网络测速。让您随时随地查看当前网络状态。 特性&#xff1a; 1、提供下载&#xff0c;上传和延时检测 2、保留详细测试记录&#xff0c;方便随时查看 3、为下载图片、视频等提供时长参考建议 拥…

更新win11网络卡顿浏览器网速慢

描述:从win10使用官方的升级助手升级到win11后使用浏览器特别卡,但是使用360测网速竟然有网 ps:wifi我用的是校园网,手机热点不卡 解决方案:卸载无线网卡驱动使用360驱动大师安装,驱动精灵没有扫描出来我才用的360驱动大师,然后在修改你所连接wifi的dns设置改为8.8.8.8 和114…

Win10怎么把网速调整到最快? Win10网速调整最快的方法

电脑网速很慢就会非常影响用户的使用体验&#xff0c;其实可以自己设置提高网速。下面小编就给大家带来一篇Win10把网速调到最快的方法教程。希望可以帮助到你呀&#xff01; 方法介绍&#xff1a; 1、右键单击“开始菜单”&#xff0c;选择“运行”&#xff0c;输入“gpedit.m…

app小窗口悬浮工具_悬浮窗口大师

悬浮窗口大师是一款非常实用的手机悬浮窗app&#xff0c;主要有时间悬浮窗、倒计时悬浮窗以及图片和文本悬浮窗等模式&#xff0c;适用于多种场景&#xff0c;可以将文字和标签添加进去&#xff0c;自由挑选喜欢的字体、颜色和背景音乐&#xff0c;让你的手机更加独特。虽然体积…

电信4g网速测试软件,移动联通电信三大运营商4G网速测试,仅供非专业人士参考...

流量漫游费马上就要取消了&#xff0c;哪家运营商的手机用起来更爽呢&#xff1f; 除了资费&#xff0c;网速也很关键&#xff0c;网速慢影响使用体验。 万一将来携号转网真能实现了&#xff0c;想转哪个网也可以参考。 建议大家选个备用号&#xff0c;哪家网好就换哪个&#x…

Arrays of Length Zero 长度为0的数组的使用

声明零长度数组是 GNU 对标准 C 的扩展&#xff0c;可以参考这里 Zero-Length 。若要在一个结体体中声明一个 0 长度数组则这个声明必须放在结构体的最后&#xff0c;如&#xff1a; struct hci_dev_req {uint16_t dev_id;uint32_t dev_opt; };struct hci_dev_list_req {uint1…

Win10系统delivery optimization服务占用网速

有用户发现在任务管理器中有个Delivery Optimization进程占用了大量的网速&#xff0c;导致上网速度特别慢&#xff0c;还出现卡顿的现象&#xff0c;这要怎么办&#xff1f;下面小编就给大家分享一下详细的解决办法。 Win10专业版ISO下载_Win10专业版官方原版镜像下载 - 系统…