Android Question Who HasFocus within ImageViews nested in Panels & CustomListViews

Gregg Homan

Member
Licensed User
Longtime User
Hello,

Suppose the code below produces multiple rows of two side-by-side ImageViews, how do I find which objects HasFocus if one of the ImageViews is pressed by a user?

Thanks,
Gregg

Dim links As List
Dim clv As CustomListView
....
....
Activity.AddView (clv.AsView, 0%x, 0%y, 100%x, 100%y)
For Each link As String In links
....
....
Dim p As Panel
Dim ImageView1 As ImageView
Dim ImageView2 As ImageView
clv.Add(p, 100dip, link)
p.AddView (ImageView1, 0dip, 0dip, 300dip, 150dip)
p.AddView (ImageView2, 0dip, 150dip, 300dip, 150dip)
.....
.....
Next
....
....
 

barx

Well-Known Member
Licensed User
Longtime User
Where do you initialize image view?
 
Upvote 0

Gregg Homan

Member
Licensed User
Longtime User
Barx, I stripped some of the initialization out to reduce code to bare bones which I now added back in below. Sorry Gregg

Dim links As List
links.Initialize
....
....
Dim clv As CustomListView
clv.Initialize(Me, "clv")
Activity.AddView (clv.AsView, 0%x, 0%y, 100%x, 100%y)
For Each link As String In links
....
....
Dim p As Panel
Dim ImageView1 As ImageView
ImageView1.Initialize ("")
ImageView1.Gravity = Gravity.Fill
Dim ImageView2 As ImageView
ImageView2.Initialize ("")
ImageView2.Gravity = Gravity.Fill
clv.Add(p, 100dip, link)
p.AddView (ImageView1, 0dip, 0dip, 300dip, 150dip)
p.AddView (ImageView2, 0dip, 150dip, 300dip, 150dip)
.....
.....
Next
....
....
 
Upvote 0

Mahares

Expert
Licensed User
Longtime User
Check this code. I hope you can get some idea from it.
B4X:
Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.
    Dim ImageView1, ImageView2, ImageView3 As ImageView
    Dim p As Panel
End Sub

Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
'    Activity.LoadLayout("mylayout")
    p.Initialize("")
    ImageView1.Initialize("Image") :ImageView1.Color=Colors.White
    ImageView2.Initialize("Image") :ImageView2.Color=Colors.Red
    ImageView3.Initialize("Image") :ImageView3.Color=Colors.Blue
    ImageView1.Tag=1
    ImageView2.Tag=2
    ImageView3.Tag=3
    p.AddView (ImageView1, 0dip, 0dip, 300dip, 140dip)
    p.AddView (ImageView2, 0dip, 150dip, 300dip, 140dip)
    p.AddView (ImageView3, 0dip, 300dip, 300dip, 140dip)
    Activity.AddView(p,0,0,100%x,100%y)
End Sub

Sub Image_Click
    Dim Send As ImageView
    Send = Sender
        Msgbox("You clicked image " & Send.tag,"")
End Sub
 
Upvote 0

Gregg Homan

Member
Licensed User
Longtime User
Thanks Mahares, your code example above was very insightful. Here is example code the displays a two-by-many CustomListView image grid containing two images in each row and enables user to eliminate any image from grid by simply touching it. Thanks again, Gregg

Sub Globals
Dim links As List
Dim clv As CustomListView​
End Sub

Sub Activity_Create(FirstTime As Boolean)
links.Initialize
links.Add("http://www.website/images/image1.jpg")
links.Add("http://www.website/images/image2.jpg")
links.Add("http://www.website/images/image3.jpg")
links.Add("http://www.website/images/image4.jpg")
links.Add("http://www.website/images/image5.jpg")
links.Add("http://www.website/images/image6jpg")
links.Add("http://www.website/images/image7.jpg")
links.Add("http://www.website/images/image8.jpg")
clv.Initialize(Me, "clv")
Activity.AddView (clv.AsView, 0%x, 0%y, 100%x, 100%y)
CustomListView_Display​
End Sub

Sub ImageView1_Click
'Removes any image touched by user in rightmost image column then redisplays CustomListView
Dim Send As ImageView
Send = Sender
If links.Size > 0 Then links.RemoveAt(Send.Tag)
CustomListView_Display​
End Sub

Sub ImageView2_Click
'Removes any image touched by user in leftmost image column then redisplays CustomListView
Dim Send As ImageView
Send = Sender
If links.Size > 0 Then links.RemoveAt(Send.Tag)
CustomListView_Display​
End Sub

Sub CustomListView_Display
If links.Size = 0 Then Return

'Initialize things
clv.Clear
Dim m As Map
m.Initialize
Dim i, j As Int
i = 0
j = 0

'Load CustomListView with two images per row
For Each link As String In links
If i = 0 Then
Dim p As Panel
p.Initialize("")
clv.Add(p, 100dip, link)
p.LoadLayout("ListItem") 'layout only contains two side-by-side ImageView1 & ImageView2 objects
m.Put(ImageView1, link)
ImageView1.Tag = j
i = 1
Else If i = 1 Then
m.Put(ImageView2, link)
ImageView2.Tag = j
i = 0
End If
j = j + 1
Next

CallSubDelayed2(ImageDownloader, "Download", m) 'requires httputils2 library​
End Sub
 
Upvote 0
Top