gpt4 book ai didi

android - 在子屏幕首选项的 actionBar 中显示向上按钮

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:42:00 24 4
gpt4 key购买 nike

我已经实现了官方指南中显示的我的偏好。

我有一个 PreferenceActivity,它像这样创建 PreferenceFragment:

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

Bundle extras = getIntent().getExtras();
if (extras != null)
{
Bundle bundle = new Bundle();
_widgetID = extras.getInt(GlobalSettings.EXTRA_WIDGET_ID);
bundle.putInt(GlobalSettings.EXTRA_WIDGET_ID, _widgetID);

WidgetSettingsFragment fragment = new WidgetSettingsFragment();
fragment.setArguments(bundle);

getFragmentManager().beginTransaction().replace(android.R.id.content,
fragment).commit();
}

}

PreferenceFragment 从资源中加载首选项,它们包含一个首选项子屏幕,如下所示:

<PreferenceScreen  xmlns:android="http://schemas.android.com/apk/res/android">
<!-- opens a subscreen of settings -->
<PreferenceScreen
android:key="button_voicemail_category_key"
android:title="@string/voicemail"
android:persistent="false">
<ListPreference
android:key="button_voicemail_provider_key"
android:title="@string/voicemail_provider" ... />
<!-- opens another nested subscreen -->
<PreferenceScreen
android:key="button_voicemail_setting_key"
android:title="@string/voicemail_settings"
android:persistent="false">
...
</PreferenceScreen>
<RingtonePreference
android:key="button_voicemail_ringtone_key"
android:title="@string/voicemail_ringtone_title"
android:ringtoneType="notification" ... />
...
</PreferenceScreen>
...
</PreferenceScreen>

到目前为止效果很好,但现在我想在显示首选项子屏幕时在 actionBar 中有一个 up-Button。知道如何实现吗?

我已尝试在我的 Activity 中设置 setDisplayHomeAsUpEnabled(true),但向上按钮仅显示在主要首选项中(不应显示),而不显示在子屏幕中。

我想知道即使在官方文档中显示的子屏幕也没有激活的向上按钮: Setting subscreens

文档链接:Settings

非常欢迎任何帮助

最佳答案

我终于让它工作了:D。这很老套,但它确实有效。

问题是,在 xml 布局中使用子屏幕会导致一些“代码魔术”。为子屏幕启动了一个新的 Activity/对话框,您无法直接访问它。

要访问操作栏和主页/向上按钮的 OnClickListener,您需要获取对 PreferenceScreen 的引用并获取其父对话框,以便访问操作栏及其主页/向上按钮。

这是在我的 PreferenceFragment 中完成的方式:

 @Override
public void onCreate(Bundle savedInstanceState)
{
...

final PreferenceScreen preferenceScreen = (PreferenceScreen) findPreference(getString(R.string.keyPrefScreenDynamicWidgetDetails));
preferenceScreen.setOnPreferenceClickListener(new OnPreferenceClickListener()
{
public boolean onPreferenceClick(Preference preference)
{
preferenceScreen.getDialog().getActionBar().setDisplayHomeAsUpEnabled(true);
final Dialog dialog = preferenceScreen.getDialog();

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);
}
}
return true;
}
});
...

}

以下链接为我提供了解决问题的最终提示和代码:

Action Bar Home Button not functional with nested PreferenceScreen

关于android - 在子屏幕首选项的 actionBar 中显示向上按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21440685/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com