Forum Archive

Tableview not reloading

robertiii

I cannot get the second table to reload with data from the first tableview on did select.


import ui
import json
import time

songList = []

libraryData = []
serviceData = []
previewData = []
liveData = []

def getJsonSongs():
    with open('songs.json') as in_file:
        new_dict = json.load(in_file)
    for song in new_dict:
        songList.append(song)

def setLibrarySongs():
    for song in songList:
        libraryData.append(song)

getJsonSongs()
setLibrarySongs()

class libraryTable(object): #also acts as the data_source.  Can be separate, but this is easier.  
    def __init__(self,items):   
        self.items = items
        self.currentNumLines = len(items)
        self.currentTitle = None
        self.currentRow = None

    def tableview_did_select(self, tableview, section, row):
        # Called when a row was selected.
        serviceData.append(self.items[row])
        servTable.reload()
        tableview.reload()
    def tableview_did_deselect(self, tableview, section, row):
        # Called when a row was de-selected (in multiple selection mode).
        pass

    def tableview_title_for_delete_button(self, tableview, section, row):
        # Return the title for the 'swipe-to-***' button.
        return 'Delete' # or 'bye bye' or 'begone!!!'

    def tableview_number_of_sections(self, tableview):
        # Return the number of sections (defaults to 1). Someone else can mess with 
        # sections and section logic
        return 1

    def tableview_number_of_rows(self, tableview, section):
        # Return the number of rows in the section
        return self.currentNumLines #needed to be in sync with displayed version, 

    def tableview_cell_for_row(self, tableview, section, row):
        # Create and return a cell for the given section/row
        cell = ui.TableViewCell()
        cell.text_label.text =  self.items[row]['title']
        # or you could comment out the line above and use
        #
        #if self.items[row]['accessory_type'] == 'checkmark':
        #   cell.text_label.font = ('<system-bold>',20)
        # or 
        # cell.text_label.text_color = '#FF0000'
        #
        # for emphasis instead 
        #  
        return cell


    def tableview_can_delete(self, tableview, section, row):
        # Return True if the user should be able to delete the given row.
        return True # you can use logic to lock out specific ("pinned" entries) 

    def tableview_can_move(self, tableview, section, row):
        # Return True if a reordering control should be shown for the given row (in editing mode).
        return True # see above

    def tableview_delete(self, tableview, section, row):
        # Called when the user confirms deletion of the given row.
        self.currentNumLines -=1 # see above regarding hte "syncing"
        tableview.delete_rows((row,)) # this animates the deletion  could also 'tableview.reload_data()'
        del self.items[row]

    def tableview_move_row(self, tableview, from_section, from_row, to_section, to_row):
        # Called when the user moves a row with the reordering control (in editing mode).

        self.items = listShuffle(self.items,from_row,to_row) 
        # cynchronizes what is displayed with the underlying list


class serviceTable(object): #also acts as the data_source.  Can be separate, but this is easier.  
    def __init__(self,items):   
        self.items = items
        self.currentNumLines = len(items)
        self.currentTitle = None
        self.currentRow = None

    def tableview_did_select(self, tableview, section, row):
        # Called when a row was selected.
        selectedItem = self.items[row]['title']
        serviceData.append(listForTable([selectedItem]))
        servTable.reload()

    def tableview_did_deselect(self, tableview, section, row):
        # Called when a row was de-selected (in multiple selection mode).
        pass

    def tableview_title_for_delete_button(self, tableview, section, row):
        # Return the title for the 'swipe-to-***' button.
        return 'Delete' # or 'bye bye' or 'begone!!!'

    def tableview_number_of_sections(self, tableview):
        # Return the number of sections (defaults to 1). Someone else can mess with 
        # sections and section logic
        return 1

    def tableview_number_of_rows(self, tableview, section):
        # Return the number of rows in the section
        return self.currentNumLines #needed to be in sync with displayed version, 

    def tableview_cell_for_row(self, tableview, section, row):
        # Create and return a cell for the given section/row
        cell = ui.TableViewCell()
        cell.text_label.text =  self.items[row]['title']
        # or you could comment out the line above and use
        #
        #if self.items[row]['accessory_type'] == 'checkmark':
        #   cell.text_label.font = ('<system-bold>',20)
        # or 
        # cell.text_label.text_color = '#FF0000'
        #
        # for emphasis instead 
        #  
        return cell


    def tableview_can_delete(self, tableview, section, row):
        # Return True if the user should be able to delete the given row.
        return True # you can use logic to lock out specific ("pinned" entries) 

    def tableview_can_move(self, tableview, section, row):
        # Return True if a reordering control should be shown for the given row (in editing mode).
        return True # see above

    def tableview_delete(self, tableview, section, row):
        # Called when the user confirms deletion of the given row.
        self.currentNumLines -=1 # see above regarding hte "syncing"
        tableview.delete_rows((row,)) # this animates the deletion  could also 'tableview.reload_data()'
        del self.items[row]

    def tableview_move_row(self, tableview, from_section, from_row, to_section, to_row):
        # Called when the user moves a row with the reordering control (in editing mode).

        self.items = listShuffle(self.items,from_row,to_row) 
        # cynchronizes what is displayed with the underlying list





libDel = libraryTable(libraryData)
servDel = serviceTable(serviceData)

control = ui.load_view()
control.name = "Church Presentation App"

libTable = control['libraryTable']
servTable = control['serviceTable']

libTable.delegate = libTable.data_source = libDel
servTable.delegate = servTable.data_source = servDel

nav = ui.NavigationView(control)
nav.present('fullscreen',hide_title_bar=True)

stephen

@robertiii may i get the json data your using? or a dummy version

stephen

really haard to ork with with no data lol and i have no idea how your dictionary is structured

mikael

@robertiii, I think your main issue is that tableview_number_of_rows is returning a static value. You should return len(right_list_for_the_datasource).

robertiii

Mikael you’re a genius!