LiveData简单使用

liveData

为某个属性添加观察者,然后数据变化后通知观察者对UI更改;

例子

打分的demo,用最基本的语法方式实现,那么activity中会持有三个组件的引用和其对应的点击事件,在点击时候计数器增加并同时更新textview显示;
在这里插入图片描述

这里引用网络的longway老师的一张图,通过livedata将点击控件后做的两步操作分开;
1.livedata对数据添加观察者,只要数据变化就去更新textview;
2.点击事件只对分数进行更改
图片来自网络
代码如下

/**
 * 测试LiveData
 */
public class MainActivity2 extends AppCompatActivity {
    
    

    private TextView textView;
    private Button button1;
    private Button button2;
    private MainViewModel2 viewModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(null);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.textView);
        button1 = findViewById(R.id.button1);
        button2 = findViewById(R.id.button2);
        viewModel = ViewModelProviders.of(this).get(MainViewModel2.class);//新版这里写法不同
        textView.setText(String.valueOf(viewModel.getScore()));
        //对分数数据添加观察者,变动后自动更新UI
        viewModel.getScore().observe(this, new Observer<Integer>() {
    
    
            @Override
            public void onChanged(Integer integer) {
    
    
                textView.setText(String.valueOf(integer));
            }
        });
        button1.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                viewModel.addScore(1);
            }
        });
        button2.setOnClickListener(new View.OnClickListener() {
    
    
            @Override
            public void onClick(View v) {
    
    
                viewModel.addScore(2);
            }
        });
    }
}

Model类

/**
 * 测试liveData对应的类
 */
public class MainViewModel2 extends ViewModel {
    
    
    private MutableLiveData<Integer> score;

    public MainViewModel2() {
    
    
        score = new MutableLiveData<>();
        score.setValue(0);
    }

    public void addScore(int n) {
    
    
        score.setValue(new Integer(score.getValue() + n));
    }

    public MutableLiveData<Integer> getScore() {
    
    
        return score;
    }
}

仅此记录,如有问题,欢迎指出,谢谢

猜你喜欢

转载自blog.csdn.net/nongminkouhao/article/details/114993883
今日推荐