--> android source code full: Backpress in fragment | Deskripsi Singkat Blog di Sini

Find The Complete Source Code Android


Showing posts with label Backpress in fragment. Show all posts
Showing posts with label Backpress in fragment. Show all posts

Friday, December 23, 2016

no image

Fragment, Fragment BackStack, POP Fragment


A fragment is an independent Android component which can be used by an activity. A fragment encapsulates functionality so that it is easier to reuse within activities and layouts.

A fragment runs in the context of an activity, but has its own life cycle and typically its own user interface. It is also possible to define fragments without an user interface.

In this tutorial i will cover creation of fragment, BackStack, POP From BackStack etc.








Steps to use Fragment in your project.

  1. Crate a project(FragmentDemo) in android studio.
  2. Open your main_activity.xml and update it-
    <?xml version="1.0" encoding="utf-8"?>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.pankaj.fragment.demo.MainActivity">

    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <Button
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:onClick="fragmentOne"
    android:text="fragment One" />

    <Button
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:onClick="fragmentTwo"
    android:text="fragment Two" />

    <Button
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:onClick="fragmentWhree"
    android:text="fragment Three" />
    </LinearLayout>

    <FrameLayout
    android:id="@+id/content_frame"
    android:layout_width="match_parent"
    android:layout_height="match_parent"></FrameLayout>

    </LinearLayout>
     
  3.  Now Create a class  Utills.JAVA class and update it. "replaceFragment(fragment, fragmentManager)" is used to  check the instance of the fragment, if a instance of fragment is already added in back stack then, It will pop that fragment, else will create new instance of this given fragment.
    package com.pankaj.fragment.demo.utils;

    import android.content.Context;
    import android.support.v4.app.ActivityCompat;
    import android.support.v4.app.Fragment;
    import android.support.v4.app.FragmentManager;
    import android.support.v4.app.FragmentTransaction;
    import com.pankaj.fragment.demo.R;

    /**
    * Created by android_studio on 23/12/16.
    */
    public class utils {

    //________This method will be check, if a instance of fragment is already added in back stack then, It will pop that fragment, else will create new instance.
    public static void replaceFragment(Fragment fragment, FragmentManager manager) {
    String backStateName = fragment.getClass().getName();
    boolean fragmentPopped = manager.popBackStackImmediate(backStateName, 0);

    //fragment not in back stack, create it.
    if (!fragmentPopped) {
    FragmentTransaction ft = manager.beginTransaction();
    ft.replace(R.id.content_frame, fragment);
    ft.addToBackStack(backStateName);
    ft.commit();
    }
    }
    }



  4.  Now create three fragment FragmentOne.Java, FragmentTwo.Java and FragmentThree.Java and update to below code.

    FragmentOne.Java
    package com.pankaj.fragment.demo.fragments;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    import com.pankaj.fragment.demo.R;
    import com.pankaj.fragment.demo.inner_fragments_for_fragment_one.FragmentInnerA;
    import com.pankaj.fragment.demo.utils.utils;
    /**
    * Created by android_studio on 23/12/16.
    */
    public class FragmentOne extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);

    //________create the object of main view for FragmentOne
    View v = inflater.inflate(R.layout.fragment_one, null);


    Button innerFragmentA = (Button) v.findViewById(R.id.innerFragmentA);

    //________add listener to innerFragmentA button
    innerFragmentA.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View view) {

    //_________replace the fragment to inner fragment
    utils.replaceFragment(new FragmentInnerA(), getActivity().getSupportFragmentManager() );
    }
    });

    //________return the object of main view for FragmentOne
    return v;
    }
    }


    FragmentTwo.Java
    package com.pankaj.fragment.demo.fragments;

    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    import com.pankaj.fragment.demo.R;
    import com.pankaj.fragment.demo.inner_fragment_for_fragment_two.FragmentTwoInnerA;
    import com.pankaj.fragment.demo.utils.utils;

    /**
    * Created by android_studio on 23/12/16.
    */

    public class FragmentTwo extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);

    //________create the object of main view for FragmentTwo
    View v = inflater.inflate(R.layout.fragment_two, null);

    //________create the object of button innerFragmentA
    Button FragmentTwoInnerFragmentA = (Button) v.findViewById(R.id.FragmentTwoInnerFragmentA);

    //________add listener to FragmentTwoInnerFragmentA button
    FragmentTwoInnerFragmentA.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

    //_________replace the fragment to inner fragment
    utils.replaceFragment(new FragmentTwoInnerA(), getActivity().getSupportFragmentManager());
    }
    });

    //________return the object of main view for FragmentTwo
    return v;
    }
    }

    FragmentThree.Java
     
    package com.pankaj.fragment.demo.fragments;

    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    import com.pankaj.fragment.demo.R;
    import com.pankaj.fragment.demo.inner_fragment_for_fragment_three.FragmentThreeInnerA;
    import com.pankaj.fragment.demo.inner_fragment_for_fragment_two.FragmentTwoInnerA;
    import com.pankaj.fragment.demo.utils.utils;

    /**
    * Created by android_studio on 23/12/16.
    */

    public class FragmentThree extends Fragment {

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

    //________create the object of main view for FragmentTwo
    View v = inflater.inflate(R.layout.fragment_three, null);

    //________create the object of button FragmentThreeInnerFragmentA
    Button FragmentThreeInnerFragmentA = (Button) v.findViewById(R.id.FragmentThreeInnerFragmentA);

    //________add listener to FragmentThreeInnerFragmentA button
    FragmentThreeInnerFragmentA.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

    //_________replace the fragment to inner fragment
    utils.replaceFragment(new FragmentThreeInnerA(), getActivity().getSupportFragmentManager());
    }
    });

    //________return the object of main view for FragmentThree
    return v;
    }
    }
  5.   Create XML for all three fragment.
    fragment_one.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Fragment One" />

    <Button
    android:layout_width="wrap_content"
    android:text="Fragment One Inner Fragment A"
    android:id="@+id/FragmentOneInnerFragmentA"
    android:layout_height="wrap_content" />

    </LinearLayout>


    fragment_two.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Fragment two" />

    <Button
    android:id="@+id/FragmentTwoInnerFragmentA"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Fragment Two Inner Fragment A" />

    </LinearLayout>

    fragment_three.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Fragment three" />

    <Button
    android:id="@+id/FragmentThreeInnerFragmentA"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Fragment Three Inner Fragment A" />

    </LinearLayout>


  6.  Now create Fragments to open inside the fragments
     FragmentOneInnerA.Java
    package com.pankaj.fragment.demo.inner_fragments_for_fragment_one;

    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    import com.pankaj.fragment.demo.R;
    import com.pankaj.fragment.demo.inner_fragment_for_fragment_three.FragmentThreeInnerB;
    import com.pankaj.fragment.demo.utils.utils;

    /**
    * Created by android_studio on 23/12/16.
    */

    public class FragmenOnetInnerA extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);

    //________create the object of main view for FragmenOnetInnerA
    View v = inflater.inflate(R.layout.fragment_inner_a, null);

    //________create the object of button FragmentOneInnerFragmentB
    Button FragmentOneInnerFragmentB = (Button) v.findViewById(R.id.FragmentOneInnerFragmentB);

    //________add listener to FragmentOneInnerFragmentB button
    FragmentOneInnerFragmentB.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

    //_________replace the fragment to inner fragment
    utils.replaceFragment(new FragmentOneInnerB(), getActivity().getSupportFragmentManager());
    }
    });

    //________return the object of main view for FragmenOnetInnerA
    return v;
    }
    }



    fragment_one_inner_a.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Fragment One Inner Fragment A" />

    <Button
    android:id="@+id/FragmentOneInnerFragmentB"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Fragment One Inner Fragment B" />
    </LinearLayout>




    FragmentOneInnerB.Java
    package com.pankaj.fragment.demo.inner_fragments_for_fragment_one;

    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import com.pankaj.fragment.demo.R;

    /**
    * Created by android_studio on 23/12/16.
    */

    public class FragmentOneInnerB extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);

    //________create the object of main view for FragmentOneInnerB
    View v = inflater.inflate(R.layout.fragment_one_inner_b, null);

    //________return the object of main view for FragmentOneInnerB
    return v;

    }
    }



    fragment_one_inner_b.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Fragment One Inner Fragment B" />

    </LinearLayout>





    FragmentTwoInnerA.Java
    package com.pankaj.fragment.demo.inner_fragment_for_fragment_two;

    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    import com.pankaj.fragment.demo.R;
    import com.pankaj.fragment.demo.utils.utils;

    /**
    * Created by android_studio on 23/12/16.
    */

    public class FragmentTwoInnerA extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);

    //________create the object of main view for FragmentTwoInnerA
    View v = inflater.inflate(R.layout.fragment_two_inner_a, null);

    //________return the object of main view for FragmentTwoInnerA
    return v;
    }
    }



    FragmentThree.Java
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Fragment Two Inner Fragment A" />

    </LinearLayout>



    FragmentThreeInnerA.Java
    package com.pankaj.fragment.demo.inner_fragment_for_fragment_three;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.Button;
    import com.pankaj.fragment.demo.R;
    import com.pankaj.fragment.demo.utils.utils;
    /**
    * Created by android_studio on 23/12/16.
    */
    public class FragmentThreeInnerA extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);

    //________create the object of main view for FragmentThreeInnerA
    View v = inflater.inflate(R.layout.fragment_three_inner_a, null);

    //________create the object of button FragmentThreeInnerFragmentB
    Button FragmentThreeInnerFragmentB = (Button) v.findViewById(R.id.FragmentThreeInnerFragmentB);

    //________add listener to FragmentThreeInnerFragmentB button
    FragmentThreeInnerFragmentB.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

    //_________replace the fragment to inner fragment
    utils.replaceFragment(new FragmentThreeInnerB(), getActivity().getSupportFragmentManager());
    }
    });

    //________return the object of main view for FragmentThreeInnerA
    return v;
    }
    }

    fragment_three_inner_a.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Fragment three Inner Fragment A" />

    <Button
    android:id="@+id/FragmentThreeInnerFragmentB"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Fragment Three Inner Fragment B" />
    </LinearLayout>


    FragmentThreeInnerB.Java
    package com.pankaj.fragment.demo.inner_fragment_for_fragment_three;
    import android.os.Bundle;
    import android.support.annotation.Nullable;
    import android.support.v4.app.Fragment;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import com.pankaj.fragment.demo.R;

    /**
    * Created by android_studio on 23/12/16.
    */

    public class FragmentThreeInnerB extends Fragment {
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    super.onCreateView(inflater, container, savedInstanceState);

    //________create the object of main view for FragmentThreeInnerB
    View v = inflater.inflate(R.layout.fragment_three_inner_b, null);

    //________return the object of main view for FragmentThreeInnerB
    return v;
    }
    }



    fragment_three_inner_b.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Fragment Three Inner Fragment B" />

    </LinearLayout>




  7.  Now Open your MainActivity.Java and update it. 
    package com.pankaj.fragment.demo;

    import android.os.Bundle;
    import android.support.v4.app.FragmentManager;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import com.pankaj.fragment.demo.fragments.FragmentOne;
    import com.pankaj.fragment.demo.fragments.FragmentThree;
    import com.pankaj.fragment.demo.fragments.FragmentTwo;
    import com.pankaj.fragment.demo.utils.utils;

    public class MainActivity extends AppCompatActivity {

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

    @Override
    public void onBackPressed() {

    //_________check if stack has only one item then close the application else reopen the previous fragment
    if (getSupportFragmentManager().getBackStackEntryCount() == 1) {
    finish();
    } else {
    super.onBackPressed();
    }

    }

    //_________methode will be call when user click on Fragment One Button
    public void fragmentOne(View view) {
    FragmentManager manager = getSupportFragmentManager();
    utils.replaceFragment(new FragmentOne(), manager);
    }

    //_________methode will be call when user click on Fragment Two Button
    public void fragmentTwo(View view) {
    FragmentManager manager = getSupportFragmentManager();
    utils.replaceFragment(new FragmentTwo(), manager);}

    //_________methode will be call when user click on Fragment Three Button
    public void fragmentWhree(View view) {
    FragmentManager manager = getSupportFragmentManager();
    utils.replaceFragment(new FragmentThree(), manager);
    }
    }


  8. All the application development process with fragments has completed, Now run the app and click on buttons(fragment One,fragment Two,fragment Three, Fragment three Inner Fragment A, Fragment three Inner Fragment B, Fragment two Inner Fragment A, Fragment one Inner Fragment A, Fragment one Inner Fragment B).



  9. Good bye, Thanks to read this blog.