Вызов функции, когда активность возвращается из фрагмента - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть фрагмент, который я так называю из моих действий onCreate

android.app.FragmentManager fragmentManager = getFragmentManager();

DeviceControlFragment newFragment = new DeviceControlFragment();

newFragment.device = device;
fragmentManager.beginTransaction()
        .replace(R.id.content_frame, newFragment)
        .commit();

Во фрагменте я могу либо вставить обратно стек, либо нанести ответный удар следующим образом:

getFragmentManager().popBackStack();

ИЛИ

getActivity().onBackPressed();

Но мне нужно что-то в упражнении, чтобы я знал, что мы туда вернулись, есть ли что-то похожее на onActivityResult, которое я могу переопределить в упражнении, чтобы знать, когда фрагмент был'закончил'

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Вы, вероятно, должны установить onBackStackChanged () слушатель в вашем менеджере фрагментов.

Пример:

getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
            @Override
            public void onBackStackChanged() {

                //here you can check stuff. like:
                final Fragment mCurrentFragment = getFragmentManager().findFragmentById(R.id.container);

                //or get the number of fragments currently on your stack:
                getFragmentManager().getBackStackEntryCount() 
            }
        });
0 голосов
/ 13 декабря 2018

Объявите интерфейс внутри фрагмента, внедрите его в свою деятельность и отправьте ответ на действие внутри onDetach(), onDestroy или onPaused метода фрагмента, любой из которых вам подходит.Я предпочту onDetach или onDestroy

Вот пример для этого:

public class MyFragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return super.onCreateView(inflater, container, savedInstanceState);
    }

    private Test mListener;

    public interface Test{
        void imLeavingYou();
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mListener = (Test) context;
    }

    @Override
    public void onDetach() {
        super.onDetach();
        if(mListener != null){
            mListener.imLeavingYou();
        }
    }
}

А в вашем Activity сделайте это:

public class MyActivity extends AppCompatActivity implements MyFragment.Test {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
    }

    @Override
    public void imLeavingYou() {
        // Okay thanks for informing
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...