我最近有这个问题,这就是我解决的方法。首先,要访问PreferenceScreen,我使用与上面提到的完全相同的方法。
@Overridepublic 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并将我们返回到上一个屏幕。
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://pre.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); } } }}


