android - ListView为空时如何处理焦点

标签 android listview focus accessibility

上下文

我正在开发一个必须完全可访问的应用程序,为此我需要指定布局的不同 View 的焦点顺序。

我的布局看起来像这样(数字定义焦点顺序,3ListView,其他是普通 View ):

My Layout

XML 的相关部分(考虑到我使用 nextFocusDown 而不是 nextFocusForward 来满足我的需要):

<View
    android:id="@+id/view_1" 
    android:nextFocusDown="@+id/view_2" />

<View
    android:id="@+id/view_2" 
    android:nextFocusDown="@android:id/list" />

<ListView
    android:id="@android:id/list" 
    android:nextFocusDown="@+id/view_4" />

<View
    android:id="@+id/view_4" 
    android:nextFocusDown="@+id/view_1" />

当 ListView 充满项目时,此方法效果很好,焦点的行为符合预期。 1 ⇒ 2 ⇒ 3(逐项)⇒ 4 ⇒ 1 ...等等。

问题

现在,当我的 ListView 为空时,Android 焦点管理器似乎停留在第二个 View 。当焦点到达项目 2 时,焦点不会给予 ListView ,甚至不会给予第 4 个 View 。因为当我的列表不包含任何项目时,我希望焦点直接从 2 转到 4

问题

我是不是遗漏了什么或者我的代码中的其他东西会产生这种奇怪的行为?

最佳答案

尝试像下面这样以编程方式设置焦点

if(yourListViewAdapter.getCount() <= 0) {
     view_2.setNextFocusDownId(R.id.view_4);
} 

关于android - ListView为空时如何处理焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41484861/

相关文章:

android Activity 交易风格?

Android:从另一个 Activity 中取消闹钟设置

java - 通过 usb 访问开发机器 localhost

Android:如何在 RelativeLayout 中均匀分布组件?

c# - 无法消除 Windows 8 Metro 'ListView' 中 Tiles 之间的填充/边距

listview - 为什么 DataContext 为 ListView 项中的项返回空值?

java - 如何从 arrayList 中的对象获取属性

javascript - 如何将焦点设置在 javascript 模态窗口上?

javascript - 无法使用 JavaScript 在 IE 上打印 iframe,而是打印父页面

javascript - Sencha Touch 2 和.focus() : set cursor into textarea