Возврат с вложенного экрана настроек Android на предыдущий экран настроек - PullRequest
2 голосов
/ 11 февраля 2011

Я программно создаю вложенный набор PreferenceScreen с. Когда пользователь погружается в один из этих экранов и что-то там нажимает, я хочу вернуться к предыдущему PreferenceScreen (то есть к «родителю»).

Я не смог найти никакой информации по этому поводу, и вызов finish() не выполняет работу, а скорее возвращает ВСЕХ PreferenceScreen с, а не один.

Ответы [ 3 ]

1 голос
/ 09 августа 2011

Я просто столкнулся с проблемой и только что нашел решение. Вы можете переопределить метод onPreferenceTreeClick в PreferenceActivity. вызовите метод getDialog для параметра preferenceScreen, затем вызовите метод dismiss диалогового окна. просто так, радость!

0 голосов
/ 27 марта 2012

Попробуйте что-то вроде:

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

}
0 голосов
/ 11 февраля 2011

Вы можете оставить первую открытую покупку, не вызывая finish () на той, которая запустила вторую. Если этого не происходит, вы можете сохранить состояние первого экрана, и вместо того, чтобы «возвращаться», вы вызываете его с помощью Намерения и загружаете его в прежнее состояние.

...