Подтвердить что ты не робот

Завершение текущей активности из фрагмента

У меня есть фрагмент в активности, который я использую в качестве ящика навигации. Он содержит кнопки, которые при нажатии запускают новые действия (startActivity из фрагмента просто вызывает startActivity для текущей активности).

В моей жизни я не могу понять, как закончить текущую деятельность после запуска новой.

Я хочу добиться чего-то подобного в фрагменте:

@Override
public void onClick(View view) {
    // TODO Auto-generated method stub
    if (view == mButtonShows) {
        Intent intent = new Intent(view.getContext(), MyNewActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(intent);
        finish();
    } 
}

Но кажется, что Fragment.class не реализует finish() (например, он реализует startActivity (...)).

Я хотел бы, чтобы активность backstack очищалась при запуске 2-го действия. (так что откат от новой активности технически отбросит их обратно в пусковую установку)

4b9b3361

Ответ 1

При работе с фрагментами вместо использования this или ссылки на контекст всегда используйте getActivity(). Вы должны позвонить

getActivity().finish();

чтобы завершить вашу деятельность из фрагмента.

Ответ 2

Ну на самом деле...

Я бы не хотел, чтобы Fragment попытался закончить Activity. На мой взгляд, это слишком сильно влияет на Фрагмент. Вместо этого я использовал бы руководство здесь: http://developer.android.com/training/basics/fragments/communicating.html

Определите Fragment интерфейс, который должен реализовать Activity. Сделайте вызов для Activity, затем пусть Activity решит, что делать с информацией. Если активность хочет закончить сама, тогда она может.

Ответ 3

Как упоминалось Jon F Hancock, вот как фрагмент может "закрыть" активность, предложив закрыть эту деятельность. Это делает перенос фрагмента как причина для них. Если вы используете его в другом действии, вы можете не захотеть закрыть активность.

Ниже приведен фрагмент действия и фрагмента, в котором есть кнопка сохранения и отмены.

PlayerActivity

public class PlayerActivity extends Activity 
    implements PlayerInfo.PlayerAddListener {

    public void onPlayerCancel() {
       // Decide if its suitable to close the activity, 
       //e.g. is an edit being done in one of the other fragments?
       finish();
    }
}

PlayerInfoFragment, который содержит интерфейс, который должна реализовать реализация вызова.

public class PlayerInfoFragment extends Fragment {
   private PlayerAddListener callback; // implemented in the Activity

   @Override
   public void onAttach(Activity activity) {
     super.onAttach(activity);
     callback= (PlayerAddListener) activity;
   }

   public interface PlayerAddListener {
       public void onPlayerSave(Player p); // not shown in impl above
       public void onPlayerCancel();
   }

   public void btnCancel(View v) {
      callback.onPlayerCancel(); // the activity implementation
   }
}

Ответ 4

Очень просто...

1- просто захватить активность getActivity() во фрагменте

2- затем вызовите finish();

Итак, просто getActivity().finish(); завершит родительскую активность.

Ответ 5

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

Вместо этого я обнаружил, что могу изменить представления назад родительской активности, используя это утверждение: setContentView (R.layout.activity_main);

Это возвращает меня к родительской активности.

Я надеюсь, что это поможет кому-то еще, кто может это искать.

Ответ 6

Вы должны использовать метод getActivity(), чтобы завершить действие из фрагмента.

getActivity().finish();

Ответ 7

try to use this

yes Fragment.class не реализует finish()

При работе с фрагментами вместо использования этого или ссылки на контекст всегда используйте getActivity(). Вы должны позвонить

Ответ 8

Во фрагменте используйте getActivity.finishAffinity()