当前位置: 首页 > 面试题库 >

动作栏主屏幕按钮不适用于嵌套的PreferenceScreen

高琛
2023-03-14
问题内容

我找到了一种解决方法,可以在嵌套的PreferenceScreen上实际启用ActionBar主页按钮…但是,它没有在我的PreferenceActivity中调用OnOptionsItemSelected。有人知道在嵌套的PreferenceScreen上实际使用主页按钮的方法吗?

在此处修改第35个帖子:

http://code.google.com/p/android/issues/detail?id=4611

@Override
    public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference)
    {
        super.onPreferenceTreeClick(preferenceScreen, preference);
        if (preference!=null)
            if (preference instanceof PreferenceScreen)
                if (((PreferenceScreen)preference).getDialog()!=null)
                    ((PreferenceScreen)preference).getDialog().getActionBar().setHomeButtonEnabled(true);
        return false;
    }

问题答案:

我最近有这个问题,这就是我解决的方法。首先,要访问PreferenceScreen,我使用与上面提到的完全相同的方法。

@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
    super.onPreferenceTreeClick(preferenceScreen, preference);

    // If the user has clicked on a preference screen, set up the action bar
    if (preference instanceof PreferenceScreen) {
        initializeActionBar((PreferenceScreen) preference);
    }

    return false;
}

从这里,我研究了PreferenceScreen是什么,而我很难过地发现它只是Dialog的包装。继续前进,然后设置操作栏显示选项并尝试找到“主页”按钮区域。不幸的是,这种方法不太容易实现,但是在层次结构查看器的帮助下,我设法找到了主页图标,然后找到了其父视图,从而获得了访问权限。一旦我们能够访问包含的LinearLayout,就可以附加onClickListener,以关闭PreferenceScreen的对话框,该对话框调用PreferenceScreen的onDismissListener并将我们返回到上一个屏幕。

/** Sets up the action bar for an {@link PreferenceScreen} */
public static void initializeActionBar(PreferenceScreen preferenceScreen) {
    final Dialog dialog = preferenceScreen.getDialog();

    if (dialog != null) {
        // Inialize the action bar
        dialog.getActionBar().setDisplayHomeAsUpEnabled(true);

        // Apply custom home button area click listener to close the PreferenceScreen because PreferenceScreens are dialogs which swallow
        // events instead of passing to the activity
        // Related Issue: https://code.google.com/p/android/issues/detail?id=4611
        View homeBtn = dialog.findViewById(android.R.id.home);

        if (homeBtn != null) {
            OnClickListener dismissDialogClickListener = new OnClickListener() {
                @Override
                public void onClick(View v) {
                    dialog.dismiss();
                }
            };

            // Prepare yourselves for some hacky programming
            ViewParent homeBtnContainer = homeBtn.getParent();

            // The home button is an ImageView inside a FrameLayout
            if (homeBtnContainer instanceof FrameLayout) {
                ViewGroup containerParent = (ViewGroup) homeBtnContainer.getParent();

                if (containerParent instanceof LinearLayout) {
                    // This view also contains the title text, set the whole view as clickable
                    ((LinearLayout) containerParent).setOnClickListener(dismissDialogClickListener);
                } else {
                    // Just set it on the home button
                    ((FrameLayout) homeBtnContainer).setOnClickListener(dismissDialogClickListener);
                }
            } else {
                // The 'If all else fails' default case
                homeBtn.setOnClickListener(dismissDialogClickListener);
            }
        }    
    }
}


 类似资料:
  • 我有一个图像按钮在我的应用程序中的每一个活动。当图像按钮被按下时,我需要转到主屏幕。我正在使用代码 但是,当我在单击图像按钮后从主屏幕导航时,它应该会从它调用的地方转到相同的页面。 例如,我有Activity1、Activity2、Activity3、Activity4等…Activity1是首页,我会选择国家,然后去Activity2,然后去Activity3,等等,但如果我从Activity4

  • 我似乎无法让图标出现在我的项目活动顶部的操作栏上,我使用了正确的名称空间和正确的扩展,一切都应该顺利运行,这是菜单项的xml,我添加了一行“xmlns:app=”http://schemas.android.com/apk/res-auto“它还是不起作用。” 这是菜单充气器的java代码

  • 我已经添加了AVPlayServiceWController视图,这是我当前viewcontroller视图的一半,然后从URL播放视频,目前一切正常,但工作正常。 事实上,我想做景观模式时,用户点击全屏按钮,在这里无法找到按钮的动作 检测纵向或横向全屏播放的视频 是否有任何通知或presentedViewController或其他信息需要了解? 我已经读了这么多问题,没有得到任何答案,所以在这里

  • 六羟甲基三聚氰胺六甲醚。。在某些情况下,我有一个对象需要在hazelcast实例上执行操作。所以我实现了HazelcastInstanceAware接口,但这似乎不适用于嵌套类。。。 以下核心输出"null"到控制台: 公共类NullError实现可序列化,HazelcastInstanceAware{私有瞬态HazelcastInstance instance1;私有瞬态HazelcastIns

  • 问题内容: 我的后退滑动功能有效,但仅在屏幕边缘有效。如何在屏幕上的任何地方工作? 问题答案: 苹果在这里说: InteractivePopGestureRecognizer 手势识别器负责将顶视图控制器从导航堆栈中弹出。(只读) @property(非原子,只读)UIGestureRecognizer * interactivePopGestureRecognizer 导航控制器将此手势识别器安

  • 我正在用JavaFX制作一个桌面应用程序,我制作了一个仅出现5秒的启动屏幕,5秒后它会显示一个带有按钮的新阶段,当我单击按钮时,它会发送一个错误: 下面是JavaFX类 RootForm.java(启动屏幕) } RootForm.fxml(启动屏幕fxml) Error.fxml(带按钮的第二阶段) ErrorController.java(应该出现的第二阶段) 在我点击第二个屏幕上的按钮后,我