Ivan
Ivan

Reputation: 866

Android Fragment Back press

I have a couple of fragments. But all the fragments lead to PeriodFragment when they press a button. My question is how do I implement so that when the user presses the BACK button on his mobile phone, the PeriodFragment will switch back to the fragment it was entered from. This is the java code from PeriodFragment.java:

public class PeriodFragment extends Fragment {

    Button btnPretrazi;

    public PeriodFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment

        View view = inflater.inflate(R.layout.fragment_period, container, false);


        //buttonPretraziPeriod
        btnPretrazi = (Button) view.findViewById(R.id.buttonPretraziPeriod);

        btnPretrazi.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getContext(),"test", Toast.LENGTH_SHORT).show();
            }
        });


        return view;
    }

}

This is my TvrdjavaFragment.java (one of the fragments that have the button to switch to PeriodFragment.java) :

package com.example.ivanp.msnis;

public class TvrdjavaFragment extends Fragment {

    Button btnIdinaperiod;

    public TvrdjavaFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_tvrdjava, container, false);
        // Inflate the layout for this fragment
        //show date
        TextView datumprikaz = (TextView) view.findViewById(R.id.datumprikaz);
        Date danas = new Date();

        SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
        String novDatum = sdf.format(danas);

        datumprikaz.setText(novDatum);
        //End of show date

        btnIdinaperiod = (Button) view.findViewById(R.id.buttonIdinaperiod);

        btnIdinaperiod.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                PeriodFragment periodFragment = new PeriodFragment();
                FragmentTransaction periodFragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
                periodFragmentTransaction.replace(R.id.frame, periodFragment);
                periodFragmentTransaction.commit();
            }
        });

        return view;
    }

}

I'm new to android studio, so please tell the details.

Upvotes: 0

Views: 112

Answers (2)

Manas Dadheech
Manas Dadheech

Reputation: 98

According to android docs When using fragments in your app, individual FragmentTransaction objects may represent context changes that should be added to the back stack. For example, if you are implementing a master/detail flow on a handset by swapping out fragments, you should ensure that pressing the Back button on a detail screen returns the user to the master screen. To do so, call addToBackStack() before you commit the transaction:

// Works with either the framework FragmentManager or the
// support package FragmentManager (getSupportFragmentManager).
getSupportFragmentManager().beginTransaction()
                       .add(detailFragment, "detail")
                       // Add this transaction to the back stack
                       .addToBackStack()
                       .commit();

Upvotes: 1

Javanshir
Javanshir

Reputation: 792

Adding to backstack will solve the problem:

periodFragmentTransaction.replace(R.id.frame, periodFragment);
periodFragmentTransaction.addToBackStack(null);
periodFragmentTransaction.commit();

Upvotes: 0

Related Questions