2017-02-04 5 views
2

Я новичок в разработке android и сталкиваюсь с проблемой: У меня есть обычная вкладка MainActivity и создана функция SettingsActivity из действия настроек Шаблон Android Studio. MainActivity - это иерархический родительский элемент SettingsActivity.Android Studio - Настройки Активность только с одним фрагментом/нет Заголовки

код для запуска SettingsActivity в MainActivity.java:

Intent intent = new Intent(this, SettingsActivity.class); 
     startActivity(intent); 

Я только хочу иметь одну страницу настроек. В отношении Android-руководств "addPreferencesFromResource();" устарел и заменен заголовками предпочтений. Но с этими заголовками предпочтений я получаю еще одну страницу между моей главной учетной записью и моей страницей настроек настроек (определен в pref_settings.xml) После того, как вы разобрались, как избавиться от этой дополнительной страницы, я придумал это заявление в файле SettingsActivity.java в метод onCreate:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setupActionBar(); 

    getFragmentManager().beginTransaction() 
      .replace(android.R.id.content, new PillPreferenceFragment()) 
      .commit(); 
} 

Ну, это решение моей проблемы. Pref_settings.xml отображается при запуске параметра SettingsActivity. Но кнопка «Назад» больше не работает. Он всегда возвращается «назад» к параметру «Настройки», а не к «MainActivity». Так что это бесконечный цикл. Кто-нибудь знает, в чем проблема и как ее решить?

Надеюсь, мое описание понятно. Если вам нужна дополнительная информация, сообщите мне.

Большое спасибо! :)

+0

я не могу понять proerply, что вы пытаетесь донести, но то, что я думаю, что вы просите, чтобы вернуться к основной деятельности, если пользователь нажимает Кнопка назад. и его не происходит, потому что вы не реализовали на спине. не так ли? –

ответ

2

Я нашел решение самостоятельно.

мне пришлось добавить этот код в SettingsActivity.java:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case android.R.id.home: 
     this.finish(); 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
0

Попробуйте этот код ниже:

Intent i = new Intent(getApplicationContext(), SettingsActivity.class); 
      startActivity(i); 
      finish(); 

добавить эту строку в андроид манифеста в прикладной тег:

android:launchMode="singleTask" 

и не забудьте переопределить нажмите кнопку назад:

@Override 
    public void onBackPressed() { 
    super.onBackPressed(); 
    } 
+0

Спасибо за ваш быстрый ответ. К сожалению, это не решает. В моем файле манифеста я заметил, что в теге для SettingsActivity нет фильтров намерений. Может быть, это важно? – Lados

+0

обычно предназначен для работы по умолчанию: http://stackoverflow.com/questions/3321514/what-are-intent-filters-in-android – rodoboss