Pergunta

Estou definindo algumas configurações básicas para meu aplicativo Android e estou tendo alguns problemas.Em primeiro lugar, não consegui descobrir como usar o menu de três pontos no canto superior direito da barra de ação para abrir Configurações.Então criei temporariamente um botão que chama ChooseSettings:

a button

    public void chooseSettings(View view) {
    getFragmentManager().beginTransaction().replace(android.R.id.content, new PreferenceActivity()).commit();
}

Este é o código da minha classe PreferenceActivity:

public class PreferenceActivity extends PreferenceFragment {
@Override
 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Load the preferences from an XML resource
    addPreferencesFromResource(R.xml.preferences);
 }
}

Que tipo de trabalho.Isso faz com que minha tela fique assim:.

this

Foi útil?

Solução

Configurações no menu flutuante

Para usar as Configurações no menu flutuante, você precisa substituir o onOptionsItemSelected método, se ainda não for, e manipule o ID correto.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        // Code to show settings.
        return true;
    }
    return super.onOptionsItemSelected(item);
}

Substituir R.id.action_settings com o id do seu item de menu.

Exibindo o PreferenceFragment

Como você mostrou na sua imagem, sua tela de preferências está sobreposta ao layout existente.

Observe que você só pode substituir um fragmento adicionado dinamicamente.

Suponho que o xml da sua tela que contém os botões Guess Country e Guess Flags foi inflado e não foi adicionado dinamicamente como um fragmento, portanto, ao adicionar o fragmento de preferência, ele seria simplesmente exibido sobreposto.

Solução

Uma maneira de fazer isso é criando e iniciando uma nova atividade que carregará seu fragmento de preferências.

Por exemplo, se você criar uma classe chamada SettingsActivity que irá carregar as preferências (não se esqueça de adicionar ao AndroidManifest):

public class SettingsActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getFragmentManager().beginTransaction().replace(android.R.id.content, new PreferenceActivity()).commit();
    }
}

Então em seu onOptionsItemSelected, você pode iniciar a atividade de configurações.

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        Intent intent = new Intent(this, SettingsActivity.class);
        startActivity(intent);
        return true;
    }
    return super.onOptionsItemSelected(item);
}

Caso contrário, você precisaria alterar seu layout principal para usar algo como um layout de quadro para poder adicionar/remover/substituir fragmentos corretamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top