【问题标题】:Programmatically close Preference Header以编程方式关闭首选项标头
【发布时间】:2014-03-09 20:58:00
【问题描述】:

在我的应用程序中,我显示的是Preference Headers in the recommended way

我扩展 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);

我怎样才能让这该死的东西关闭!?

救命!

【问题讨论】:

  • 这个问题没有得到足够的重视——可能是因为这是一个非常具体的案例,您应该添加最少的工作代码来演示您的案例。

标签: android


【解决方案1】:

鉴于您提供的少量细节,我将尝试提供一个答案,假设您希望在打开授权屏幕时清除活动后台堆栈。

  • MyPreferenceActivity - 仅以“onBuildHeaders”为例(此外,单击按钮时会打开活动)
  • preference-headers - 仅限“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;
                }
            });
    }
}

preference_settings(我假设您没有使用复选框,但它是一个示例):

<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>  

【讨论】:

    【解决方案2】:

    请试试这个:

    protected void onListItemClick (ListView l, View v, int position, long id)
    {
        super.onListItemClick(l, v, position, id);
        finish();
    }
    

    【讨论】:

    • 虽然这可能行得通,但稍作解释将有助于理解原因。
    • 请解释为什么此代码有效。这样可以避免在不理解的情况下复制和粘贴。
    • 请你解释一下这会达到什么效果?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 2015-08-19
    • 2016-08-13
    相关资源
    最近更新 更多