android - 如何知道哪个 View 具有当前焦点

标签 android focus

我正在将焦点放在一个 View 上,但是当我改变方向时,该 View 的焦点就会丢失。 onConfigurationChanged() 处理焦点吗? 或者我需要明确设置它,如果是,那么我该如何设置焦点? 我需要跟踪当前的聚焦 View 。该怎么做?

最佳答案

在您的 Activity 中覆盖 onSaveInstanceState 和 onRestoreInstanceState 方法。然后,您可以通过获取 View 的 ID 并将其保存到 onSaveInstanceState 方法中的 Bundle 来跟踪任何具有焦点的 View 。然后在 onRestoreInstanceState 方法中,您只需获取 ID 并找到具有该 ID 的 View 。你甚至不需要施放它或任何东西。然后您只需请求该 View 的焦点。它看起来像这样:

@Override
protected void onSaveInstanceState(Bundle outState) {       
    int viewId = this.getCurrentFocus().getId();
    outState.putInt("hasFocus", viewId);

    super.onSaveInstanceState(outState);
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {      
    super.onRestoreInstanceState(savedInstanceState);

    int viewId = savedInstanceState.getInt("hasFocus");
    View view = findViewById(viewId);
    view.requestFocus();        
}

关于android - 如何知道哪个 View 具有当前焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7858760/

相关文章:

Android 选项卡式布局 setContent

android - Android "Advanced Task Killer App"是如何工作的?

java - 即使选择了 JTextField,箭头键 KeyBindings 仍然有效

jQuery输入框焦点问题

javascript - Textarea 没有聚焦而是提交

java - android4.4设备恢复出厂设置后,系统app收不到BOOT_COMPLETED广播

android - firebase 中可以有包含搜索查询吗?

java - Android - BluetoothChat 示例 - 为什么他们在这种情况下使用同步?

jquery - 如何使用纯 jQuery 延迟移除字段焦点?

android - 在不丢失 SeekBar 焦点的情况下更新 ListView 行