问题描述
我尝试使用viewModel扩展库对片段中的数据进行绑定的代码,但是在编译时发生的错误表明series1 = Sequential()
series1.add(TimeDistributed(Conv1D(3,2,activation='relu',padding='same',input_shape=(n_steps,n_features))))
series1.add(TimeDistributed(MaxPooling1D(pool_size=2,padding='valid',strides=2)))
series1.add(TimeDistributed(Flatten()))
series2 = Sequential()
series2.add(TimeDistributed(Conv1D(3,n_features))))
series2.add(TimeDistributed(MaxPooling1D(pool_size=2,strides=2)))
series2.add(TimeDistributed(Flatten()))
series3 = Sequential()
series3.add(TimeDistributed(Conv1D(3,n_features))))
series3.add(TimeDistributed(MaxPooling1D(pool_size=2,strides=2)))
series3.add(TimeDistributed(Flatten()))
merged = Concatenate([series1,series2,series3])
final_model=Sequential()
final_model.add(merged)
final_model.add(SimpleRNN(5,return_sequences=True))
final_model.add(SimpleRNN(3))
output= Dense(1170)(final_model)
model= Model(inputs=[series1,series3],outputs=output)
方法无法以常规绑定方式使用。
by viewModels()
错误。
// the library androidx.lifecycle:lifecycle-viewmodel-ktx
import androidx.fragment.app.viewModels
class MyFragment : Fragment() {
private val viewModel: MyViewModel by viewModels() // I can use viewModelFactory to set the binding. But when change to this way,it can not be compile correctly.
override fun onCreateView(
inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?
): View? {
val binding = FragmentMyBinding.inflate(inflater)
binding.lifecycleOwner = this
binding.viewModel = viewModel
...
}
解决方法
onCreateView函数的返回视图应该是数据绑定生成的类的根视图。
尝试使用此代码
class MyFragment: Fragment() {
private val viewModel: MyViewModel by viewModels()
lateinit var binding: FragmentMyBinding
override fun onCreateView(
inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?
): View? {
binding = DataBindingUtil.inflate(inflater,R.layout.fragment_layout,container,false)
return binding.root
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
binding.viewModel = viewModel
}