PreferenceActivity в API 25

514
04 января 2017, 02:05

Вычитал в интернете про создание активити настроек для приложения. Во всех статьях, что я нашёл использовался метод addPreferencesFromResource():

public class PrefActivity extends PreferenceActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences)
    }
}

Но как оказалось, этот метод deprecated, из-за чего возникает вопрос: как создаётся активити настроек в версии API 25?

UPD: Сделал всё как написано ответе, котрый дал @Regent, но при попытке запуска акивити настроек приложение закрывается, вылазит окно "приложение остановлено". PrefFragment.java:

package com.evgeniy.calc;
import android.os.Bundle;
import android.preference.PreferenceFragment;

public class PrefFragment extends PreferenceFragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.preferences);
    }
}

PrefActivity.java:

package com.evgeniy.calc;
import android.preference.PreferenceActivity;
import java.util.List;

public class PrefActivity extends PreferenceActivity {
    @Override
    public void onBuildHeaders(List<Header> target) {
        loadHeadersFromResource(R.xml.preferences, target);
    }
    @Override
    protected boolean isValidFragment(String fragmentName) {
        return PrefFragment.class.getName().equals(fragmentName);
    }
}

Вызов активити настроек в MainActivity.java:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_settings:
            startActivity(new Intent(this, PrefActivity.class));
            return true;
        case R.id.action_about:
            startActivity(new Intent(this, AboutActivity.class));
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}
Answer 1

Метод deprecated, потому что сейчас для этого предлагается использовать PreferenceFragment. Подробнее об этом написано в руководстве.

Если коротко, то так:

public class SettingsActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Display the fragment as the main content.
        getFragmentManager().beginTransaction()
                .replace(android.R.id.content, new SettingsFragment())
                .commit();
    }

    public static class SettingsFragment extends PreferenceFragment {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // Load the preferences from an XML resource
            addPreferencesFromResource(R.xml.preferences);
        }
    }
}
READ ALSO
Как диагонально растянуть текстуру

Как диагонально растянуть текстуру

Как растянуть текстуру по диагонали? Те что бы она была похожа на параллелограмм

498
Добавлять имена по нажатию в favorites

Добавлять имена по нажатию в favorites

Есть список recyclerView, в котором инициализирую имена:

423
Что в телефонах отсчитывает время? Что является его эталоном времени?

Что в телефонах отсчитывает время? Что является его эталоном времени?

Устал гуглитьчто за контроллер времени импользуется в современных смартфонах и что является его эталоном времени? В каком виде этот контроллер...

467
Нужна помощь в написании теста для консольных крестиков-ноликов

Нужна помощь в написании теста для консольных крестиков-ноликов

У меня консольная программа крестики-ноликиДля тестирования ввода с консоли я использую класс StubInput:

534