ViewModel简单使用 java版

添加依赖
implementation 'androidx.lifecycle:lifecycle-viewmodel:2.2.0'
ViewModel 的一个重要作用就是帮助Activity分担一部分工作,只要是界面上能看到的数据,它的相关变量都应该存放在ViewModel中。

1、创建MyViewModel继承ViewModel

public class myViewModel extends ViewModel {
    protected int a=0;
    public myViewModel(int a){
        this.a=a;
    }

}

2、活动里获得ViewModel对象

{
myViewModel viewModel;
TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         viewModel= new ViewModelProvider(this,new VmFactory(55)).get(myViewModel.class);//若需要传参数使用这个同
         //时实现ViewModelProvider.Factory
         // viewModel= new ViewModelProvider(this).get(myViewModel.class);//不需传参,使用无参构造函数
         //不能直接创建ViewModel的实例,不然每次活动oncreate()都会创建一个实例,无法保留其中数据
        Button btn=(Button)findViewById(R.id.btn);
        textView=(TextView)findViewById(R.id.text);
        btn.setOnClickListener(MainActivity.this);

    }
    public void onClick(View view){
        switch (view.getId()){
            case R.id.btn:
                viewModel.a++;
              textView.setText(viewModel.a+"");
        }
    }
}

3、若传参,实现ViewModelProvider.Factory接口

public class VmFactory implements ViewModelProvider.Factory {
    private int a;
    public VmFactory(int a){
        this.a=a;
    }
    @NonNull
    @Override
    public <T extends ViewModel> T create(@NonNull Class<T> modelClass) {
        return (T)new myViewModel(a) ;
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java 中,ViewModel 是一种用于管理 UI 组件数据的架构组件。ViewModel 与 Activity 或 Fragment 等 UI 组件相关联,并存储 UI 组件需要的数据,以便在旋转屏幕或配置更改等情况下保持数据。 以下是一个简单ViewModel 实例,它管理一个整数变量: ``` import androidx.lifecycle.ViewModel; public class MyViewModel extends ViewModel { private int count = 0; public void increment() { count++; } public int getCount() { return count; } } ``` 此 ViewModel 包含一个名为 `count` 的整数变量,以及两个公共方法:`increment` 和 `getCount`。`increment` 方法用于递增 `count` 变量的值,`getCount` 方法返回当前 `count` 变量的值。 在 Activity 或 Fragment 中使用ViewModel: ``` public class MyActivity extends AppCompatActivity { private MyViewModel viewModel; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 获取 MyViewModel 实例 viewModel = new ViewModelProvider(this).get(MyViewModel.class); // 使用 ViewModel 中的数据更新 UI updateUI(); // 设置一个按钮点击事件,当用户点击按钮时递增 count 变量 Button incrementButton = findViewById(R.id.increment_button); incrementButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { viewModel.increment(); updateUI(); } }); } private void updateUI() { // 更新 UI 中的文本视图,显示当前 count 变量的值 TextView countTextView = findViewById(R.id.count_text_view); countTextView.setText(String.valueOf(viewModel.getCount())); } } ``` 在 `onCreate` 方法中,我们获取 `MyViewModel` 实例,并使用 `updateUI` 方法更新 UI 中的文本视图,以显示 `count` 变量的值。我们还设置了一个按钮点击事件,当用户点击按钮时,我们递增 `count` 变量并再次调用 `updateUI` 方法,以便在 UI 中更新 `count` 变量的值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值