Pergunta

Estou usando uma preferência para mostrar algumas configurações para o meu aplicativo. Estou inflando as configurações por meio de um arquivo XML para que meu OnCreate (e métodos completos de classe) se pareça com o seguinte:

public class FooActivity extends PreferenceActivity {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        addPreferencesFromResource(R.xml.preference);
    }
}

O javadoc de Preferencatividade Preferência Fragment afirma isso

Essas preferências salvarão automaticamente nas preferências compartilhadas à medida que o usuário interage com eles. Para recuperar uma instância do SharedPreferences que a hierarquia de preferências nesta atividade usará, ligue para getDefaultSharedPreferences (android.content.context) com um contexto no mesmo pacote que esta atividade.

Mas como eu recebo o nome do SharedPreference em outra atividade? Eu só posso ligar

getSharedPreferences(name, mode)

Na outra atividade, mas preciso do nome da mamada compartilhada que foi usada pela preferenceatividade. Qual é o nome ou como posso recuperá -lo?

Foi útil?

Solução

import android.preference.PreferenceManager;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
// then you use
prefs.getBoolean("keystring", true);

Atualizar

De acordo com Preferências compartilhadas | Tutorial de desenvolvedor Android (Parte 13) por Sai Geetha Mn,

Muitos aplicativos podem fornecer uma maneira de capturar preferências do usuário nas configurações de um aplicativo específico ou uma atividade. Para apoiar isso, o Android fornece um conjunto simples de APIs.

As preferências são tipicamente pares de valor de nome. Eles podem ser armazenados como "preferências compartilhadas" em várias atividades em um aplicativo (note atualmente que não pode ser compartilhado entre os processos). Ou pode ser algo que precisa ser armazenado específico para uma atividade.

  1. Preferências compartilhadas: As preferências compartilhadas podem ser usadas por todos os componentes (atividades, serviços etc.) dos aplicativos.

  2. Preferências tratadas com atividade: essas preferências só podem ser usadas dentro da atividade específica e não podem ser usadas por outros componentes do aplicativo.

Preferências Compartilhadas:

As preferências compartilhadas são gerenciadas com a ajuda de getSharedPreferences Método do Context classe. As preferências são armazenadas em um arquivo padrão (1) ou você pode especificar um nome de arquivo (2) a ser usado para se referir às preferências.

(1) A maneira recomendada é usar pelo modo padrão, sem especificar o nome do arquivo

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);

(2) Aqui está como você obtém a instância quando especifica o nome do arquivo

public static final String PREF_FILE_NAME = "PrefFile";
SharedPreferences preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);

MODE_PRIVATE é o modo de operação para as preferências. É o modo padrão e significa que o arquivo criado será acessado apenas pelo aplicativo de chamada. Outros dois modos suportados são MODE_WORLD_READABLE e MODE_WORLD_WRITEABLE. Dentro MODE_WORLD_READABLE Outro aplicativo pode ler o arquivo criado, mas não pode modificá -lo. No caso de MODE_WORLD_WRITEABLE Outros aplicativos também possuem permissões de gravação para o arquivo criado.

Finalmente, depois de ter a instância de preferências, aqui está como você pode recuperar os valores armazenados das preferências:

int storedPreference = preferences.getInt("storedInt", 0);

Para armazenar valores No arquivo de preferência SharedPreference.Editor objeto deve ser usado. Editor é uma interface aninhada no SharedPreference classe.

SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

O editor também suporta métodos como remove() e clear() Para excluir os valores de preferência do arquivo.

Preferências de atividade:

As preferências compartilhadas podem ser usadas por outros componentes do aplicativo. Mas se você não precisar compartilhar as preferências com outros componentes e deseja ter preferências privadas de atividade, você pode fazer isso com a ajuda de getPreferences() método da atividade. o getPreference O método usa o getSharedPreferences() Método com o nome da classe de atividade para o nome do arquivo de preferência.

A seguir, o código para obter preferências

SharedPreferences preferences = getPreferences(MODE_PRIVATE);
int storedPreference = preferences.getInt("storedInt", 0);

O código para armazenar valores também é o mesmo que no caso de preferências compartilhadas.

SharedPreferences preferences = getPreference(MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putInt("storedInt", storedPreference); // value to store
editor.commit();

Você também pode usar outros métodos, como armazenar o estado da atividade no banco de dados. Nota Android também contém um pacote chamado android.preference. O pacote define classes para implementar as preferências do aplicativo interface da interface do usuário.

Para ver mais alguns exemplos, verifique o Android's Armazenamento de dados publicar no site de desenvolvedores.

Outras dicas

Se você não tem acesso a getDefaultSharedPreferenes(), você pode usar getSharedPreferences(name, mode) Em vez disso, você só precisa passar o nome certo.

O Android cria esse nome (possivelmente com base no nome do pacote do seu projeto?). Você pode obtê -lo colocando o seguinte código em um SettingsActivity onCreate(), e vendo o que preferencesName é.

String preferencesName = this.getPreferenceManager().getSharedPreferencesName();

A string deve ser algo como com.example.projectname_preferences. Código difícil que em algum lugar do seu projeto e o passe para getSharedPreferences() E você deve estar pronto para ir.

Declare esses métodos primeiro ..

public static void putPref(String key, String value, Context context) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
    SharedPreferences.Editor editor = prefs.edit();
    editor.putString(key, value);
    editor.commit();
}

public static String getPref(String key, Context context) {
    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
    return preferences.getString(key, null);
}

Então chame isso quando quiser colocar um Pref:

putPref("myKey", "mystring", getApplicationContext());

Chame isso quando quiser obter um Pref:

getPref("myKey", getApplicationContext());

Ou você pode usar este objeto https://github.com/kchibili/tinydb-erroid shared-preferences-turbo que simplifica tudo ainda mais

Exemplo:

TinyDB tinydb = new TinyDB(context);

tinydb.putInt("clickCount", 2);
tinydb.putFloat("xPoint", 3.6f);
tinydb.putLong("userCount", 39832L);

tinydb.putString("userName", "john");
tinydb.putBoolean("isUserMale", true); 

tinydb.putList("MyUsers", mUsersArray);
tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap);

Ter que passar o contexto em todos os lugares está realmente me irritando. O código se torna muito detalhado e incontrolável. Eu faço isso em todos os projetos ... em vez disso ...

public class global {
    public static Activity globalContext = null;

e defina -o na atividade principal, crie

@Override
public void onCreate(Bundle savedInstanceState) {
    Thread.setDefaultUncaughtExceptionHandler(new CustomExceptionHandler(
            global.sdcardPath,
            ""));
    super.onCreate(savedInstanceState);

    //Start 
    //Debug.startMethodTracing("appname.Trace1");

    global.globalContext = this;

Além disso, todas as chaves de preferência devem ser independentes do idioma, estou chocado que ninguém tenha mencionado isso.

getText(R.string.yourPrefKeyName).toString()

Agora chame de muito assim em uma linha de código

global.globalContext.getSharedPreferences(global.APPNAME_PREF, global.MODE_PRIVATE).getBoolean("isMetric", true);

Se você tem uma caixa de seleção e gostaria de buscar seu valor, ou seja, verdadeiro / false em qualquer arquivo java--

Usar--

Context mContext;
boolean checkFlag;

checkFlag=PreferenceManager.getDefaultSharedPreferences(mContext).getBoolean(KEY,DEFAULT_VALUE);`

Atualizado 2019

Você pode simplesmente usar PowerPreference biblioteca

https://github.com/aliesaassadi/android-power-preference

Obtendo instância de preferência compartilhada

Para obter a instância padrão, você só precisa ligar

PowerPreference.getDefaultFile()

Ou se você quiser um arquivo de preferência específico

PowerPreference.getFileByName(fileName)

Escrevendo dados:

PowerPreference.getDefaultFile().put(key,value)

Obtendo dados

PowerPreference.getDefaultFile().getString(key,value)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top