以编程方式关闭首选项标题

4
在我的应用程序中,我以推荐的方式显示首选项标题。我扩展PreferenceActivity并从XML资源添加标题,如下所示:
@Override
public void onBuildHeaders(List<Header> target) {
    loadHeadersFromResource(R.xml.preference_headers, target);
}

其中之一的标题是:

<header
    android:fragment="com.example.FragmentSettings"
    android:summary="Tap to configure"
    android:title="General Settings" />

启动扩展PreferenceFragment的主要首选项片段。

特定设置允许用户擦除应用程序可以访问的所有数据并取消授权其帐户。

如果用户选择此选项,我会清除所有内容,包括缓存、共享首选项等,并希望将其返回到初始授权屏幕。

问题是偏好设置标题屏幕仍然存在,即使所有活动都调用finish();甚至我调用System.exit(0);

我该如何关闭它!?

帮帮我!


3
这个问题似乎没有得到足够的关注,可能是因为它是一个非常具体的案例,并且您应该添加最小工作代码以展示您的情况。 - ozbek
2个回答

0
鉴于您提供的细节很少,我将尝试提供一个答案,假设您想在打开授权屏幕时清除活动回退堆栈。
  • MyPreferenceActivity - 只有'onBuildHeaders'作为示例(此外,当点击按钮时打开活动)
  • preference-headers - 只有'FragmentSettings'

FragmentSettings:

public class FragmentSettings extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preference_settings);

        Preference myPref = (Preference) findPreference("pref_clearAllData");
        myPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
                public boolean onPreferenceClick(Preference preference) {
                    Intent intent = new Intent(FragmentSettings.this.getActivity(), AuthActivity.class);
                    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); 
                    startActivity(intent);

                    return true;
                }
            });
    }
}

偏好设置(我假设您没有使用复选框,但它可以作为示例):

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<PreferenceCategory android:title="General Settings" >
    <CheckBoxPreference
        android:key="pref_clearAllData"
        android:title="Clear all data"
        android:summary="Clears all data and shows the authorisation screen"
        android:defaultValue="false" />
</PreferenceCategory>  


-1
请尝试这个:
protected void onListItemClick (ListView l, View v, int position, long id)
{
    super.onListItemClick(l, v, position, id);
    finish();
}

2
虽然这可能有效,但稍微解释一下会更有助于理解原因。 - djikay
请解释为什么这段代码能够工作。这样可以避免复制粘贴而不理解的情况发生。 - rayryeng
请问您能解释一下这会实现什么目的吗? - brandall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接