首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从嵌套的Android PreferenceScreen返回到以前的PreferenceScreen

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

Stack Overflow用户
提问于 2011-02-11 23:10:18
回答 3查看 2.9K关注 0票数 2

我正在以编程的方式创建一组PreferenceScreen,当用户进入其中一个屏幕,并点击其中的某些内容时,我想返回到以前的PreferenceScreen (即"parent")。

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

EN

回答 3

Stack Overflow用户

发布于 2011-08-09 17:13:08

我只是遇到了这个问题,并找到了解决方案。您可以在PreferenceActivity中重写方法onPreferenceTreeClick。调用param preferenceScreen的getDialog方法,然后调用对话框的dismiss方法。就像这样,乔伊!

票数 1
EN

Stack Overflow用户

发布于 2011-02-12 02:01:32

您可以让第一个进程保持打开状态,而不是在启动第二个进程的进程上调用finish()。如果这样做不起作用,你可以保存第一个屏幕的状态,而不是“返回”,你通过一个意图调用它,并让它加载它的前一个状态。

票数 0
EN

Stack Overflow用户

发布于 2012-03-27 08:12:33

尝试如下所示:

代码语言:javascript
复制
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);
    }


}

具有自定义首选项类别,如:

代码语言:javascript
复制
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;
    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4970605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档