从嵌套的Android PreferenceScreen返回到以前的PreferenceScreen

时间:2011-02-11 15:10:18

标签: android nested preferencescreen

我正在以编程方式创建一组PreferenceScreen s的嵌套。当用户潜入其中一个屏幕并点击其中一些内容时,我想回到之前的PreferenceScreen,(即“父母”)。

我找不到任何关于此的信息,并且调用finish()不能完成工作,而是从所有PreferenceScreen而不是仅返回一个。

3 个答案:

答案 0 :(得分:1)

我刚刚遇到问题并找到了解决方案。 您可以在PreferenceActivity中覆盖onPreferenceTreeClick上的方法。 调用param的preferenceScreen的getDialog方法,然后调用对话框的dismiss方法。 就像这样,快乐!

答案 1 :(得分:0)

您可以将第一个打开,不要在启动第二个的上面调用finish()。如果不这样做,你可以保存第一个屏幕的状态,而不是“返回”你用Intent调用它并让它加载它以前的状态。

答案 2 :(得分:0)

尝试类似:

package com.justinbuser.preferences;

import android.preference.PreferenceActivity;
import android.preference.PreferenceScreen;
import android.os.Bundle;

public class DynamicSettingsActivity extends PreferenceActivity{

    public DynamicSettingsActivity(){
        super();
    }

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

        PreferenceScreen defaultRoot = getPreferenceManager().createPreferenceScreen(this);
        defaultRoot.setKey("root");

        PreferenceScreen videoScreen = getPreferenceManager().createPreferenceScreen(this);
        videoScreen.setTitle(R.string.video_chooser_title);
        videoScreen.setSummary(R.string.video_chooser_summary);
        videoScreen.setKey(getString(R.string.video));
        //The following MUST be called before creating videoPref
        defaultRoot.addPreference(videoScreen);

        videoPref = new VideoChooserPreferenceCategory(mContext, videoScreen);
        videoPref.setTitle(R.string.video_chooser_dialog_title);
        videoPref.setSummary(R.string.video_chooser_dialog_summary);
        videoScreen.addPreference(videoPref);

        setPreferenceScreen(defaultRoot);
    }


}

使用自定义偏好类别:

package com.justinbuser.preferences;

import android.content.Context;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.preference.PreferenceScreen;
import android.preference.Preference.OnPreferenceClickListener;

public class VideoChooserPreferenceCategory extends PreferenceCategory implements OnPreferenceClickListener {

    private PreferenceScreen parentScreen;
    private final Context mContext;

    public VideoChooserPreferenceCategory(Context context) {
        super(context);
        mContext = context;
    }

    public VideoChooserPreferenceCategory(Context context, PreferenceScreen preferenceScreen) {
        super(context);
        parentScreen = preferenceScreen;
        mContext = context;
    }

    @Override
    protected void onAttachedToActivity() {

        if(this.getPreferenceCount() > 0)
        {
            this.removeAll();
        }
        Preference videoPref = new Preference(mContext);
        videoPref.setKey(videoIds[videoId]);
        videoPref.setTitle("Video Title");
        videoPref.setSummary("Video Description");
        videoPref.setOnPreferenceClickListener(this);
        addPreference(videoPref);
        super.onAttachedToActivity();
    }

    public boolean onPreferenceClick(Preference preference) {
        parentScreen.getDialog().dismiss();
        this.callChangeListener(preference.getKey());
        return true;
    }

}