Как использовать метод просмотра viewclient в AndroidViewClient

У меня есть следующие коды для обхода ListView в AndroidViewClient для создания списка учетных записей. Это работает нормально, но это хороший способ сделать это, потому что я не могу найти более правильный способ передачи переменной list_accounts в функцию findAccount(), так как она вызывает ошибку аргумента, поэтому я должен использовать ее глобально. Есть ли способ передать параметр в метод преобразования vc.traverse()?

def findAccount(view):
    if view.getClass() == 'android.widget.TextView':
        text = view.getText()
        if re.match(re.compile('.*@yahoo.com'), text):
            list_accounts.append(text)

list_accounts = []
listview_id = vc.findViewByIdOrRaise('id/no_id/11')
vc.traverse(root=listview_id, transform=findAccount)
for item in list_accounts:
    print "account:", item

1 ответ

Решение

Вы можете сделать это

def findAccount(la, view):
    if view.getClass() == 'android.widget.TextView':
        text = view.getText()
        if re.match(re.compile('.*@yahoo.com'), text):
            la.append(text)

list_accounts = []
listview_id = vc.findViewByIdOrRaise('android:id/list')
vc.traverse(root=listview_id, transform=lambda v: findAccount(list_accounts, v))
for item in list_accounts:
    print "account:", item

но я не уверен, что это более понятно и читаемо, чем ваша версия.

Тем не менее, вы можете сделать

for tv in vc.findViewsWithAttribute('class', 'android.widget.TextView', root=listview_id):
    text = tv.getText()
    if re.match(re.compile('.*@yahoo.com'), text):
        list_accounts.append(text)

который, я думаю, улучшает читабельность.

Другие вопросы по тегам