Android: закрыть активность из PreferenceFragment

мое приложение работает только в фоновом режиме. В качестве активности у меня есть только настройки, и после нажатия кнопки «Пуск» вызывается служба, и активность завершается. Для этого я использую MainActivity, который вызывает PreferenceFragment:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getFragmentManager().beginTransaction().replace(android.R.id.content, new MainSettingsFragment()).commit();
}

Чтобы запустить Сервис или выйти из активности, я создал меню

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_settings, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) { 
    case R.id.action_exit:
        finish();
        break;
    case R.id.action_start:
        Intent intentService = new Intent(MainSettingsActivity.this, ReminderService.class);
        startService(intentService);
        finish();
        break;
    return true;
}

Это мой очень простой PreferenceFragment, используемый для отображения settings_layout

public class MainSettingsFragment extends PreferenceFragment{

     @Override
     public void onCreate(Bundle savedInstanceState){
         super.onCreate(savedInstanceState);
         addPreferencesFromResource(R.xml.settings_layout);
     }
}

В settings_layout также определены два пункта Preference: Start и Exit.

Я хотел бы переместить функции Start и Exit, размещенные в меню, как элемент в макете. В XML-файле легко создать намерение, позволяющее запустить службу, но я не знаю, как закрыть действие. Как я могу реализовать функцию finish() внутри Activity (кто вызывает PreferenceFragment), чтобы убить себя? Как я могу получить событие «Нажмите Exit» внутри Activity? Получения события внутри PreferenceFragment достаточно для реализации слушателя, например:

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPref, String key) {
    Preference pref = findPreference(key);
    /* Do something */
    } 
}

но после этого я понятия не имею, как закрыть активность. Есть идеи? Большое спасибо!


person Walter    schedule 14.10.2014    source источник


Ответы (1)


ЕСЛИ я правильно понял, вы хотели бы закрыть действие из фрагмента? Почему вы не используете getActivity() в своем фрагменте, а затем не вызываете finish()?

person Carsten    schedule 14.10.2014
comment
Да, это здорово! Мой вопрос был простым, но я хотел четко описать сценарий, но и ответ был довольно простым, я действительно не думал о getAcivity. Большое спасибо! - person Walter; 15.10.2014