1

I'm building an app, with MVVM pattern applied. I've added all the required dependencies. Also, I know how to pass variables to my xml layout files, and how to use a function using them as parameters. But I just don't know how to handle ArrayList type of variables.

This is the data class declaration part from my 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" />

And binded the data like this in MainActivity

val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)

//binds data
binding.vm = mMainActivityViewModel
binding.lifecycleOwner = this
binding.codeBlock = mMainActivityViewModel.getBlockButton()

so I did pass the ArrayList of custom classes, each of them is called CodeBlock. And here's what I've tried :

<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])}"/>

or not [0], but .get(0)

and I think, or I'm sure it is because that the type of codeBlock[0] varaiable is ambiguous. In MainActivity, this thing gives me an error sign.

var ff : CodeBlock = binding.codeBlock[0]

Type Mismatch , Required : CodeBlock Found : Any!

Why??? I gave it ArrayList and it received that?

Also, this gives me an error too.

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

Well should I use kotlin.collections.ArrayList<CodeBlock>? but in variable type in activity_main.xml, it does not support that kind of type. It seems it only support types from java. I can't find kotlin.collections.ArrayList. So how can I pass ArrayList type of variables to view? And this ArrayList property? this is not gonna change. It is a list of blocks that the user can choose in a stage. So it shouldn't be Mutable.

When I try to run the code, the error says cannot find method addNewBlock(java.lang.Object) in class com.example.mvvm.MainActivityViewModel

2

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.