Android Question How do I iterate over b4xfloattxtfields in xCustomlistview

Discussion in 'Android Questions' started by Hilton, Apr 22, 2019.

  1. Hilton

    Hilton Member Licensed User

    Hi,

    I have been learning how to use the b4xtable and b4xcustomlistview.

    Initially, in the expanded form of the xCustomListview I was using labels, buttons and edittexts and was able to iterate over the items in the panel associated with the selected item in the list and store them in a map - the key being the TAG field and the value being the object (label etc). Using that map I was able to get and set the text values of the fields that belonged to any item in the xCustomListView list.

    Fine, but I liked the economy of space of the b4xFloatTextField so I used them instead, but it does not work the same. Would someone kindly point me in the right direction as I would like to try to use cross platform code as much as possible.

    Thank you.
     
  2. DonManfred

    DonManfred Expert Licensed User

    Where is the projectupload which shows the issue?
     
  3. Erel

    Erel Administrator Staff Member Licensed User

    It should work like this:
    Code:
    Dim ft As B4XFloatTextField = clv.GetPanel(0).GetView(2).Tag 'get the field from the first item assuming that the field is the third view in the layout.
     
  4. Hilton

    Hilton Member Licensed User

    Thanks for that, but that was pretty much what I was trying. As an experiment I took the B4A_ExpandableList and:
    1. removed the customlistview module and used XUI VIEWS instead.
    2. added a B4XFloatTextField to the pnlExpanded panel in the designer.
    3. gave all items in the pnlExpanded a tag (eg et1,btn1,ft etc.....)
    4. added this code at the end of Sub ExpandItem so that it looks like this
    Code:
    Sub ExpandItem (index As Int)
        
    Dim id As ItemData = clv1.GetValue(index)
        clv1.ResizeItem(index, 
    id.ExpandedHeight)
        clv1.GetPanel(index).Tag = 
    True
        AnimatedArrow(index, 
    0180)
        
    '-------test code-------
        pnlExpanded = clv1.GetPanel(index).GetView(1)
        
    Log(pnlExpanded.Tag)
        
    For i = 0 To pnlExpanded.NumberOfViews - 1
            
    Dim x As B4XView = pnlExpanded.Getview(i)
            
    Log(x.Tag)
        
    Next
    End Sub
    5. the results were fine(with the correct tag names showing) for all views but the B4XFloatTextField which listed a whole lot of stuff I do not understand. I was hoping to just get the tag.

    I am not certain if anything is wrong or if the problem is me with my lack of understanding. In any event help would be appreciated.
     
  5. Erel

    Erel Administrator Staff Member Licensed User

    It will be useful to add Log(GetType(x.Tag))

    Code:
    For x As b4XView In pnlExpanded.GetAllViewsRecursive
     
    If x.Tag Is B4XFloatTextField Then
      
    Dim ft As b4XFloatTextField = x.Tag
      
    Log(ft.Tag)
     
    Else
      
    Log(x.Tag)
    End If
    Next
     
  6. Hilton

    Hilton Member Licensed User

    That has done the trick. Knowing that the initial tag is the object is useful. The question is, will that be consistent across all XUI VIEWS?

    Thank you for your help.
     
  7. Erel

    Erel Administrator Staff Member Licensed User

    Yes.
     
    Hilton likes this.
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice