Android Question Variable Reference to a view not stable ?

MitchBu

Well-Known Member
Licensed User
Longtime User
I need to get the view at a point on the screen for later processing, so I use an overlaid panel all over the activity to get x and y.

Then I have a sub that sets a global variable created in sub Globals
ViewToMove as View
to the control at these coordinates :

Code:
Sub ViewAtXY(x, y) As Int

            For mCnDx = 0 To PnlCheck.NumberOfViews-1

                If x >= PnlCheck.GetView(mCnDx).Left And x <= PnlCheck.GetView(mCnDx).Left + PnlCheck.GetView(mCnDx).Width And _
                y >= PnlCheck.GetView(mCnDx).Top And y <= PnlCheck.GetView(mCnDx).Top + PnlCheck.GetView(mCnDx).Height And _
                PnlCheck.GetView(mCnDx) <> PnlGreenBackground Then
                    Log("found")
                    ViewToMove = PnlCheck.GetView(mCnDx)
                    Log("vtm " & ViewToMove.Tag)
                    Return mCnDx
                End If
            Next

            Return -1 'Not found
end sub

I am puzzled because sometimes it works as expected, but I also get errors view not initialized (below).

It looks as if somehow ViewToMove no longer points to the view it was assigned in ViewAtXY.

What am I missing ?

main_pnltouch_touch (B4A line: 1585)
Log("Drag " & ViewToMove.Tag)
java.lang.RuntimeException: Object should first be initialized (View).
at anywheresoftware.b4a.AbsObjectWrapper.getObject(AbsObjectWrapper.java:50)
at anywheresoftware.b4a.objects.ViewWrapper.getTag(ViewWrapper.java:232)
at b4a.CheckPrintR.main._pnltouch_touch(main.java:4226)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:169)
at anywheresoftware.b4a.BA$1.run(BA.java:293)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:145)
at android.app.ActivityThread.main(ActivityThread.java:6134)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194)

PS : I looked through the forum, in particular https://www.b4x.com/android/forum/threads/variables-objects-in-basic4android.8385/

and it looks as the variable should keep its value, since I am not changing it.
 
Last edited:

Thanks, but it does not change the fact the the global variable ViewToMove seems to become local to the method, and loses validity outside of that sub. Yet I am not Dimming it there, so I believe it should remain global.

I can get the tag from it inside the sub, but not in PnlTouch touch event. That is my big problem.
 
Upvote 0
Try declare this in Starter.
Dim ViewToMove As View

and recall this as:
Code:
...
Log("found")
Starter.ViewToMove = PnlCheck.GetView(mCnDx)
Log("vtm " & ViewToMove.Tag)
....
 
Upvote 0
Back
Top