如何在AndroidViewClient中使用viewclient遍历方法

时间:2015-05-14 06:43:06

标签: android python androidviewclient

我有以下代码遍历AndroidViewClient中的ListView以构建帐户列表。它工作正常,但这是一个很好的方法,因为我无法找到更合适的方法将变量list_accounts传递给函数findAccount(),因为它引发了一个Argument错误,所以我必须全局使用它。有没有办法将参数传递给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 个答案:

答案 0 :(得分: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)

我想这会提高可读性。