Я создаю приложение с применением шаблона MVVM.Я добавил все необходимые зависимости.Кроме того, я знаю, как передавать переменные в мои файлы макета XML и как использовать функцию, используя их в качестве параметров.Но я просто не знаю, как обрабатывать переменные типа ArrayList.
Это часть объявления класса данных из моего activity_main.xml
<variable
name="vm"
type="com.example.mvvm.MainActivityViewModel" />
<variable
name="codeBlock"
type="java.util.ArrayList"/>
<variable
name="block"
type="com.example.mvvm.CodeBlock" />
И эти данные связываются в MainActivity.
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
//binds data
binding.vm = mMainActivityViewModel
binding.lifecycleOwner = this
binding.codeBlock = mMainActivityViewModel.getBlockButton()
поэтому я передал ArrayList пользовательских классов, каждый из которых называется CodeBlock.И вот что я попробовал:
<TextView
android:id="@+id/bt_move"
style="?android:attr/buttonBarButtonStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/move"
android:textAllCaps="false"
android:textColor="@color/Black"
android:onClick="@{vm.addNewBlock(codeBlock[0])}"/>
или нет [0]
, но .get(0)
, и я думаю, или я уверен, что это потому, что тип codeBlock[0] переменная неоднозначна.В MainActivity эта штука дает мне знак ошибки.
var ff : CodeBlock = binding.codeBlock[0]
Type Mismatch , Required : CodeBlock Found : Any!
Почему ???Я дал ему ArrayList, и он получил это?
Кроме того, это также дает мне ошибку.
var ff : ArrayList<CodeBlock> = binding.codeBlock
Smart cast to 'kotlin.collections.ArrayList<CodeBlock> /*= java.util.ArrayList<CodeBlock> */' is impossible, because 'binding.codeBlock' is a mutable property that could have been changed by this time
Ну, долженЯ использую kotlin.collections.ArrayList<CodeBlock>
?но в типе переменной в activity_main.xml
он не поддерживает этот тип.Кажется, он поддерживает только типы из Java.Я не могу найти kotlin.collections.ArrayList
.Итак, как я могу передать переменные типа ArrayList для просмотра?А это свойство ArrayList?это не изменится.Это список блоков, которые пользователь может выбрать на этапе.Так что он не должен быть изменяемым.
Когда я пытаюсь запустить код, появляется сообщение cannot find method addNewBlock(java.lang.Object) in class com.example.mvvm.MainActivityViewModel