既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
R.id.$ 可以获取组件id的数值 配合 findViewById使用
R.string.$ 可以获取字符常量
//TextView获取操作
TextView texView;
Button button1,button2;
textView = findViewById(R.id.textView1);
button1 = findViewById(R.id.button1);
//添加按钮监听器
button1.setOnClickListener( new View. OnClickListener() {
@Override
public void onClick(View view) {
textView. setText ("左边") ;
}
});
本地化及多语言支持
strings.xml选择右上open Edit后选择地球图标直接选择语言就能多出以列去写新的语言翻译了
LivingData&&dataBinding
LivingData
创建对象继承viewModel然后里面的对象存放在MutableLiveData容器里面
public class MyViewModel extends ViewModel {
private MutableLiveData<Integer> count;
public MutableLiveData<Integer> getCount() {
if (count == null) {
count = new MutableLiveData<>();
count.setValue(0) ;
}
return count;
}
public void add(int p){
count.setValue(count.getValue() + p);
}
}
dataBinding
主要目的是让数据存储下来 以及双向绑定
首先再build.gradle(app)里面default下面添加
dataBinding {
enabled true
}
然后layout.xml里面添加ait + 回车 convert to dataBinding即可更改xml视图格式多出标签,其中填写LivingData对象就能完成数据的双向绑定,就不需要用java代码去根据id获取xml里面的控件然后再改内容,直接通过xml和LivingData(类)进行数据交互;
<data>
<variable
name= "data" type="com.example.viewmodelrestore.MyViewModet" />
</data>
主函数内将livingData 和 dataBinding进行绑定
public class MainActivity extends AppCompatActivity {
MyViewModel myViewModel; //LivingData对象
ActivityMainBinding binding; //dataBinding对象
@Override
protected void onCreate( Bundle savedInstanceState) {
super.onCreate( savedInstanceState);
//将layout绑定到dataBinding
binding = DataBindingUtil.setContentView(this,R.layout.activity_main);
//实体化livingData
myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
//绑定
binding.setData(myViewModel);
//设置对象
binding.setLifecycleOwner(this);
}
}
然后通过xml控制控件数据就行,如下,就绑定了数据以及点击事件
android:text=“@{String.valueOf(data.getCount())}”
android:onClick=“@{()->data.add()}”
viewModelStateSave实现杀死进程数据仍然存在
先在build.grade(app)下dependencies里面添加
implementation ‘androidx.lifecycle:lifecycle-viewmodel-savedstate:1.0.0-alpha01’
然后改造使用handle; key-value形式
public class MyViewModel extends ViewModel {
private SavedStateHandle handle;
public MyViewModel(SavedStateHandle handle){
this.handle = handle;
}
public MutableLiveData<Integer> getCount() {
if (!handle.contains("count")) {
handle.set("count",0);
}
return handle.getLiveData("count");
}
public void add(){
getCount().setValue(getCount().getValue() + 1);
}
}
创建的时候记得带上参数savedState,new SavedStateVMFactory(this))创建即可
myViewModel = ViewModelProviders.of(this,new SavedStateVMFactory(this)).get(MyViewModel.class);
SharedPreferences本地持久化存储
[基于前面两个配置实现]反正就是拿一个类基础AppCompatActivity直接控制存key-value到本地xml里面
data-data-找到包下面就能看到本地文件,存储使用onPause(),不适用destory或者stop它们经常被跳过
修改实体类直接实现实体类存储;其他不变
package com.example.myapplication;
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.MutableLiveData;
import androidx.lifecycle.SavedStateHandle;
import androidx.lifecycle.ViewModel;
public class MyViewModel extends AndroidViewModel {
private SavedStateHandle handle;
public MyViewModel(@NonNull Application application) {
super(application);
this.handle = handle;
if (!handle.contains("count")) {
load();
}
![img](https://img-blog.csdnimg.cn/img_convert/b7570b904a0e602c9c2e795640d46cc3.png)
![img](https://img-blog.csdnimg.cn/img_convert/10ab46237e59312f7ec2583c1b517c9c.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**
8272)]
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**