【问题标题】:android viewmodel mutablelivedata not updating, 2 way data bindingandroid viewmodel mutablelivedata 不更新,2 路数据绑定
【发布时间】:2020-08-04 14:55:32
【问题描述】:

我的片段是这样的:


class LoginFragment : Fragment() {

    private lateinit var viewModel: AuthViewModel
    private lateinit var mBinding: FragmentLoginBinding

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        mBinding = DataBindingUtil.inflate<ViewDataBinding>(
            inflater, R.layout.fragment_login, container, false
        ) as FragmentLoginBinding
        val view: View = mBinding.root
        viewModel = ViewModelProvider(requireActivity()).get(AuthViewModel::class.java)
        mBinding.login?.invoke(viewModel)
        return view
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        initLoginButton()
    }

    fun initLoginButton() {
        mBinding.btLogin.setOnClickListener {
            Log.d("d--login", "login clicked")
            Log.d("d--login", viewModel.username.value)
            Log.d("d--login", viewModel.password.value)
        }
    }
}

我的 AuthViewModel 看起来像这样:

class AuthViewModel : ViewModel() {
    operator fun invoke(viewModel: AuthViewModel) {}
    val username = MutableLiveData<String>("")
    val password = MutableLiveData<String>("")
    val passwordRe = MutableLiveData<String>("")

}

在 XML 中我有两个编辑文本:

<EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:focusedByDefault="true"
                android:inputType="text"
                android:text="@={login.username}"
                android:textColor="@color/colorWhite" />

但是视图模型上的用户名没有更新,我也尝试过 ObservableField。同样的问题。

在家长活动中,我有:


        mBinding = DataBindingUtil.setContentView(this, R.layout.activity_authentication)
        viewModel = ViewModelProvider(this).get(AuthViewModel::class.java)
        mBinding.auth?.invoke(viewModel)
        mBinding.lifecycleOwner = this

【问题讨论】:

    标签: android kotlin android-livedata android-viewmodel


    【解决方案1】:

    您的ViewModelFragment 没有任何连接

    这样做:

    片段:

    private lateinit var vm: AuthViewModel
        
            override fun onCreate(savedInstanceState: Bundle?) {
                super.onCreate(savedInstanceState)    
             vm = activity?.run {
                    ViewModelProviders.of(this)[AuthViewModel::class.java]
                } ?: throw Exception("Invalid Activity")       
            }
    
          override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                                  savedInstanceState: Bundle?): View? {
            val binding: FragmentLoginBinding = DataBindingUtil.inflate(inflater,
                    R.layout.fragment_login, container, false)
               binding.viewmodel = vm//attach your viewModel to xml
            return binding.root
          }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 2021-03-14
      • 2022-11-22
      • 2013-06-18
      • 2017-06-13
      • 2019-04-27
      • 2018-12-20
      相关资源
      最近更新 更多