Android MVVM数据绑定EditText值在片段中更改的配置上丢失

Android MVVM数据绑定EditText值在片段中更改的配置上丢失,android,android-fragments,mvvm,android-livedata,android-databinding,Android,Android Fragments,Mvvm,Android Livedata,Android Databinding,我在片段中使用数据绑定时遇到问题 短问题:当我更改手机方向时,在编辑文本中输入的值丢失 详细信息:首先通过导航组件创建我的片段。因此,我的活动如下所示: @AndroidEntryPoint class MainActivity : AppCompatActivity() { private lateinit var navController: NavController override fun onCreate(savedInstanceState: Bundle?)

我在片段中使用数据绑定时遇到问题

短问题:当我更改手机方向时,在编辑文本中输入的值丢失

详细信息:首先通过导航组件创建我的片段。因此,我的活动如下所示:

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

    private lateinit var navController: NavController

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        navController = findNavController(R.id.my_nav_host_fragment)
    }
}
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>

        <variable
            name="myViewModel"
            type="my.package.name.MyViewModel" />

    </data>
[...]

    <EditText 
        [...]
        android:text="@={myViewModel.name}"
        [...] />
[...]
所以我得到了第一个片段(列表),列表的每个元素上都有编辑按钮。然后点击“编辑”,进入第二个片段。问题就在这里。这是一个包含一个EditText和一些其他信息的简单表单

我正在尝试这样的双向数据绑定:

@AndroidEntryPoint
class MainActivity : AppCompatActivity() {

    private lateinit var navController: NavController

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        navController = findNavController(R.id.my_nav_host_fragment)
    }
}
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>

        <variable
            name="myViewModel"
            type="my.package.name.MyViewModel" />

    </data>
[...]

    <EditText 
        [...]
        android:text="@={myViewModel.name}"
        [...] />
[...]
在我的片段中,我有一个按钮要保存,如果我在EditText中输入“example”,然后单击按钮,在我的ViewModel中值为ok,我会得到“example”

但我的问题是:如果我输入“示例”,然后在横向中打开手机,EditText中的值将丢失

我试着调试,发现当我旋转手机时,我又转到了片段的“onCreateView”。所以我猜我重新创建了一个新的ViewModel

任何帮助都将不胜感激!提前谢谢

应该是

@HiltViewModel
class MyViewModel @Inject constructor(
    private val repo: MyRepository
) : ViewModel() {

private val myViewModel by viewModels()

EpicPandaForce谢谢,它就像一个符咒!我没有使用Dagger(实现'com.google.Dagger:Dagger:2.31.2'),所以不知道@HiltViewModel。。。我想我得检查一下匕首,因为剑柄不一样。
private val myViewModel by viewModels<MyViewModel>()