Отображение настроек с помощью «Настройки» в трехточечном меню.

StackOverflow https://stackoverflow.com//questions/23047221

  •  21-12-2019
  •  | 
  •  

Вопрос

Я настраиваю некоторые базовые настройки для своего приложения для Android, и у меня возникли некоторые проблемы.Прежде всего, я не мог понять, как использовать меню из трех точек в правом верхнем углу панели действий, чтобы открыть «Настройки».Поэтому я временно создал кнопку, которая вызывает ChooseSettings:

a button

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

Это код моего класса 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);
 }
}

Какой вид работает.В результате мой экран выглядит так:.

this

Это было полезно?

Решение

Настройки в дополнительном меню

Чтобы использовать настройки в дополнительном меню, вам необходимо переопределить onOptionsItemSelected метод, если это еще не сделано, и обработайте правильный идентификатор.

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

Заменять R.id.action_settings с идентификатором вашего пункта меню.

Отображение PreferenceFragment

Как показано на изображении, экран настроек перекрывает существующий макет.

Обратите внимание, что вы можете заменить только добавленный вами фрагмент. динамически.

Я предполагаю, что xml для вашего экрана с кнопками «Угадай страну» и «Угадай флаги» был раздут и не добавлялся динамически как фрагмент, поэтому при добавлении фрагмента предпочтений он будет просто отображаться с перекрытием.

Решение

Один из способов сделать это — создать и запустить новое действие, которое будет загружать фрагмент ваших настроек.

Например, если вы создаете класс с именем SettingsActivity который загрузит настройки (не забудьте добавить в 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();
    }
}

Тогда в твоем onOptionsItemSelected, вы можете начать настройку.

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

В противном случае вам придется изменить основной макет, чтобы использовать что-то вроде макета кадра, чтобы вы могли правильно добавлять/удалять/заменять фрагменты.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top