我有一个ListView,它将填充来自服务器的数据(电话号码),我每2秒轮询一次。当TalkBack功能打开并且我点击列表项时,talkBack没有机会读取整个字符串,因为刷新发生并且talkBack从乞讨开始。有没有办法检测TalkBack是否正在读取内容描述?谢谢。
答案 0 :(得分:2)
ListView
依赖于Adapter.hasStableIds()
的值来确定是否可以跨数据集更改重复使用膨胀的视图。
如果此方法返回false
,则ListView假定更改前后的数据集之间没有一致性。因此,它不知道应该在哪里放置辅助功能。
但是,如果此方法返回true
并且您的适配器在项ID和数据之间保持一致的映射,则ListView能够将可访问性焦点保持在正确的项目上 - 即使它更改了数据集中的位置
要解决此问题,您可以修改适配器以维护稳定的ID:
class MyAdapter extends ListAdapter {
...
@Override
public boolean hasStableIds() {
return true;
}
@Override
public long getItemId(int position) {
// Return a consistent mapping between the item at a given
// position and an arbitrary (but consistent!) ID associated
// with that item.
...
}
}