我是一个新的android应用程序开发。请帮助。我想直接在我的视图模型类中获得导航片段参数。我正在使用数据绑定。
下面是我的导航片段参数
<fragment>
......
..
<action
android:id="@+id/action_update_to_listOfStudentFragment"
app:destination="@id/list_fragment" />
<argument
android:name="currentStudent"
app:argType="com.example.school.model.Student" />
</fragment>
当我点击我的回收器视图项时,我用导航动作传递参数对象。所以我在适配器的onbind函数中设置了click listener。我将学生对象作为参数传递。
holder.itemLayoutBinding.root.setOnClickListener {
val action = ListOfStudentFragmentDirections.actionListOfStudentFragmentToUpdate(currentStudent)
holder.itemLayoutBinding.root.findNavController().navigate(action)
}
我的视图模型在这里。我想知道另一件事:我在这里使用AndroidViewModel作为数据库上下文。是否有其他方法可以避免使用AndroidViewModel?我想使用ViewModel,但视图模型不提供上下文。
class MainModleView(application: Application) : AndroidViewModel(application) {
val getAllStudentData: LiveData<List<Student>>
val repository: Repository
val inputName = MutableLiveData<String>()
val inputAge = MutableLiveData<String>()
init {
val studentDao: StudentDao = StudentDatabase.getAllData(application).studentDao()
repository = Repository(studentDao)
getAllStudentData = repository.getAllData
}
因此,在View-Model的实时数据中,我希望从 fragments arguments 设置inputName和inputAge值。
inputName.value = fragmentsarugments.name //arguments pass a model object from recyclerview on click function
inputAge.value = fragmentsarugments.age
请给予我一个解决方案。我只想在我的ViewModel中获取片段的参数。
3条答案
按热度按时间vecaoik11#
我认为这很简单。只要一行代码就可以完成你的工作。
savedstatehand将在此处提供导航片段参数您参数类型为Studnet类
现在从你的fragment动作传递arguments对象,你将得到每个传递的arguments对象,并保存状态句柄。
你会得到你的传递对象。
oknwwptz2#
使用
ViewModelProviderFactory
作为自定义参数。初始化视图模型时,可以直接传递参数。创建如下视图模型
然后,您可以从传递的参数初始化变量
ix0qys7i3#
将参数传递给视图模型