Android ViewModel使用模板

1,创建ViewModel类

//MainViewModel.kt
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import com.example.myapplication.entity.Banner
import com.example.myapplication.network.BaseResponse
import com.example.myapplication.network.NetworkUtil
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response

class MainViewModel : ViewModel() {
    private val _errorLiveData: MutableLiveData<String> = MutableLiveData()
    val errorLiveData: LiveData<String> = _errorLiveData

    private val _bannerLiveData = MutableLiveData<List<Banner>>()
    val bannerLiveData:LiveData<List<Banner>> = _bannerLiveData

    fun getBanners(){
        NetworkUtil.wanAndroidApi.getBanners()
            .enqueue(object : Callback<BaseResponse<List<Banner>>> {
                override fun onResponse(
                    call: Call<BaseResponse<List<Banner>>>,
                    response: Response<BaseResponse<List<Banner>>>
                ) {
                    _bannerLiveData.value=response.body()?.data
                }

                override fun onFailure(
                    call: Call<BaseResponse<List<Banner>>>,
                    t: Throwable
                ) {
                    _errorLiveData.value = t.message.toString()
                }
            })
    }
}

2,引用ViewModel

//MainActivity.kt
class MainActivity : ComponentActivity() {
    private lateinit var mViewModel:MainViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
              Column(Modifier.fillMaxSize(), 
                  horizontalAlignment = Alignment.CenterHorizontally) { 
                var textState by rememberSaveable { mutableStateOf("Initial Text")}                
                mViewModel.bannerLiveData.observe(this@MainActivity){
                        textState = it.toString() }

                 Button(onClick = { mViewModel.getBanners() }) { 
                        Text(text = "获取网络信息") } 

                        Text(text = textState) 
            }
        }

        mViewModel = ViewModelProvider(this)[MainViewModel::class.java]
    }
   
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值