簡體   English   中英

android viewmodel mutablelivedata 不更新,2 路數據綁定

[英]android viewmodel mutablelivedata not updating, 2 way data binding

我有這樣的片段:


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

您的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
      }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM