Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用某些函数时,数据绑定不适用于textView_Android_Kotlin_User Interface_Data Binding - Fatal编程技术网

Android 使用某些函数时,数据绑定不适用于textView

Android 使用某些函数时,数据绑定不适用于textView,android,kotlin,user-interface,data-binding,Android,Kotlin,User Interface,Data Binding,首先,我在布局文件中声明了变量 <data> <variable name="signUpViewModel" type="ac.connect.ui.signup.SignUpViewModel" /> </data> 视图模型 class SignUpViewModel(private val setProfileUseCase: SetProfileUse

首先,我在布局文件中声明了变量

    <data>
  
    <variable
        name="signUpViewModel"
        type="ac.connect.ui.signup.SignUpViewModel" />
</data>
视图模型

  class SignUpViewModel(private val setProfileUseCase: SetProfileUseCase) :    
 ViewModel() {


private val _profile = MutableLiveData<ProfileModel>()
val profile: LiveData<ProfileModel>
    get() = _profile

private val _name = MutableLiveData<String>()
val name: LiveData<String>
    get() = _name


fun setName(name: Editable) {
    _name.value = name.toString()

}


fun setProfileData() {
    viewModelScope.launch {
        val profile = ProfileModel(
                name = "kamal nayan",
                branch = "CSE",
                gender = "Male",
                mobileNumber = "+91-73555555517",
                rollNo = "GCS/345353",
                uid = "ghafagaraggGGG"

        )
        val response = setProfileUseCase.invoke(profile)
        _profile.value =  profile
        response.successOrError(::handleProductDetailsSuccess, ::handleSignUpFailure)
    }


}

private fun handleProductDetailsSuccess(response: Boolean) {
    _name.value = "User Data Uploaded Successfully"

}

private fun handleSignUpFailure(failure: Failure, error: ErrorResponse?) {
    Timber.log(Log.ERROR, error?.message)
}
  }
class SignUpViewModel(私有val setProfileUseCase:setProfileUseCase):
ViewModel(){
private val_profile=MutableLiveData()
val配置文件:LiveData
获取()=\u配置文件
private val_name=MutableLiveData()
val名称:LiveData
get()=\u名称
乐趣集名称(名称:可编辑){
_name.value=name.toString()
}
fun setProfileData(){
viewModelScope.launch{
val profile=ProfileModel(
name=“kamal nayan”,
branch=“CSE”,
性别=“男性”,
mobileNumber=“+91-7355517”,
rollNo=“GCS/345353”,
uid=“Ghafagaragggg”
)
val response=setProfileUseCase.invoke(配置文件)
_profile.value=profile
response.successOrError(::handleProductDetailsSuccess,::handleSignUpFailure)
}
}
private fun HandleProductDetailsAccess(响应:布尔值){
_name.value=“用户数据上传成功”
}
private fun handleSignUpFailure(失败:失败,错误:ErrorResponse?){
Timber.log(log.ERROR,ERROR?.message)
}
}
片段代码:

class SignUpFragment : Fragment(R.layout.fragment_sign_up) {

    private val viewModel: SignUpViewModel by viewModel()
    private var binding by autoCleared<FragmentSignUpBinding>()


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

        binding = FragmentSignUpBinding.bind(view)
        binding.signUpViewModel = viewModel
        binding.lifecycleOwner = this

        binding.signUp.setOnClickListener {
            viewModel.setProfileData()
        }

    }


    companion object {
        fun newInstance(): SignUpFragment {
            return SignUpFragment()
        }
    }
}
classsignupfragment:Fragment(R.layout.Fragment\u sign\u){
private val viewModel:SignUpViewModel by viewModel()
自动清除()的私有变量绑定
覆盖已创建的视图(视图:视图,保存状态:捆绑?){
super.onViewCreated(视图,savedInstanceState)
binding=FragmentSignUpBinding.bind(视图)
binding.signUpViewModel=viewModel
binding.lifecycleOwner=此
binding.signUp.setOnClickListener{
viewModel.setProfileData()
}
}
伴星{
fun newInstance():SignUpFragment{
返回SignUpFragment()
}
}
}
输出为空,就像textView中没有文本一样


请帮助我,提前谢谢。

我认为问题在于设置
数据绑定时没有设置变量
stringExtensions
的值

import ac.connect.utils.StringExtensions

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

    binding = FragmentSignUpBinding.bind(view)
    binding.signUpViewModel = viewModel
    // binding.stringExtensions = StringExtensions() // If it is a class
    // binding.stringExtensions = StringExtensions // If it is an object
    binding.lifecycleOwner = this

    binding.signUp.setOnClickListener {
        viewModel.setProfileData()
    }
}

如果我理解正确,您需要制作
BindingAdapter
。所以你需要重写你的“大写字母”函数,如下所示

 @BindingAdapter("app:capitalizeFirstLetter")
 @JvmStatic fun capitalizeFirstLetter(textView: TextView, value: String){
    var ans = ""
    val words = value.split(" ")

    words.forEach {
        ans += it.capitalize() + " "
    }
    textView.setText(ans)
}

另外,我没有看到在哪里调用
setName
函数。您确定
\u name.value
不是空的吗?

发布您的视图模型和片段/Activity@OhhhThatVarun都贴了。
StringExtensions
是一个类还是一个对象?它是一个函数,最近我更新了这个问题,现在我们不需要做变量。。。。制作了一个绑定适配器。。。。但是如何从布局中观察实时数据检查我的新答案。这是一个实时数据,因此如何在布局中观察这一点。。。。。。。。比如,如果它是空的,那么我们需要设置一些东西,如果它被加载,我们将设置它的值。你是否像我在回答中所说的那样为你的TextView制作BindingAdapter?请注意:您可以在
setValue
函数中设置断点。所以你可以看到这是一个电话。您还可以在
capitalizeFirstLetter
函数中设置断点,以查看传输到此处的值。
import ac.connect.utils.StringExtensions

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

    binding = FragmentSignUpBinding.bind(view)
    binding.signUpViewModel = viewModel
    // binding.stringExtensions = StringExtensions() // If it is a class
    // binding.stringExtensions = StringExtensions // If it is an object
    binding.lifecycleOwner = this

    binding.signUp.setOnClickListener {
        viewModel.setProfileData()
    }
}
 @BindingAdapter("app:capitalizeFirstLetter")
 @JvmStatic fun capitalizeFirstLetter(textView: TextView, value: String){
    var ans = ""
    val words = value.split(" ")

    words.forEach {
        ans += it.capitalize() + " "
    }
    textView.setText(ans)
}