在写AS的数据绑定练习项目时,写好的app在虚拟机上运行出现了keeps stopping的闪退现象。检查代码后发现由AS自动生成的ActivityMainBindingImpl类出现了红色下划线提示。报错信息为Cannot inherit from final "..."
Databinding的构建代码为
public class MainActivity extends AppCompatActivity {
MyViewModel myViewModel;
ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
binding.setData(myViewModel);
binding.setLifecycleOwner(this);
}
}
其中_MyViewModel_ 是由_ViewModel_ 派生出的一个子类,在_activity_main.xml_ 布局文件中已经设置为DataBinding Layout,并设置了一个变量data
<data>
<variable
name="data"
type="com.example.ex1scoring.MyViewModel" />
</data>
1.检查确认了类名没有出错,页面布局文件名为_activity_main.xml _。
2.检查了生成的父类ActivityMainBinding的代码,虽然类的成员属性都有final修饰,但没有发现类前有final的修饰(以下为ActivityMainBinding类的首行)
public abstract class ActivityMainBinding extends ViewDataBinding
{//todo}
在将myViewModel绑定到布局页面上的时候使用了
myViewModel = ViewModelProviders.of(this).get(MyViewModel.class);
但是AS3.6.1似乎已经不推荐这种用法了。在代码提示中有划去的横线。不知道是不是因为这个问题。翻看官方文档后推荐直接使用ViewModelProvider来进行构造。但是没有具体的实例,作为新手我没能明白具体应该怎么实现。
希望大家能给予一些帮助。谢谢各位大佬!
```kotlin
import androidx.activity.viewModels
val viewModel by viewModels<YourViewModel>()
```