Saturday, November 14, 2015

203 Android Studio Replace Fragments



.
203 Android Studio Replace Fragments
This tutorial demonstrates how to replace a fragment (main) with another fragment (sub).
1) START UP
It is recommended that you follow and understand the steps in the previous tutorial before attempting this tutorial.
2) DUPLICATE FILES
2.1) Duplicate fragment_main.xml as fragment_sub.xml
Edit as follows (delete the EditText and Button view objects)
<?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:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin"
   tools:context=".MainActivity"
   android:orientation="horizontal">
   <TextView android:text="This is Sub"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content" />
</LinearLayout>
2.2) Duplicate MainActivityFragment.java as SubActivityFragment.java
Edit as follows (Delete all methods except onCreateView() and SubActivityFragment() and change the layout reference to fragment_sub)
package com.notarazi.myfragments2;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* A placeholder fragment containing a simple view.
*/
public class SubActivityFragment extends Fragment {
   public SubActivityFragment() {
   }
   @Override
   public View onCreateView(LayoutInflater inflater, ViewGroup container,
                            Bundle savedInstanceState) {
       return inflater.inflate(R.layout.fragment_sub, container, false);
   }
}
2.3) Edit MainActivity.java
(We want the application to display the second fragment when the user tap the Action Button)
package com.notarazi.myfragments2;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
public class MainActivity extends AppCompatActivity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       setFragment(new MainActivityFragment());
       Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
       setSupportActionBar(toolbar);
       FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
       fab.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
               Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                       .setAction("Action"null).show();
           }
       });
   }
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       // Inflate the menu; this adds items to the action bar if it is present.
       getMenuInflater().inflate(R.menu.menu_main, menu);
       return true;
   }
   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
       // Handle action bar item clicks here. The action bar will
       // automatically handle clicks on the Home/Up button, so long
       // as you specify a parent activity in AndroidManifest.xml.
       int id = item.getItemId();
       //noinspection SimplifiableIfStatement
       if (id == R.id.action_settings) {
           return true;
       }
       if (id == R.id.action_send) {
           //Call setFragment to replace the fragment
           setFragment(new SubActivityFragment());
           return true;
       }
       return super.onOptionsItemSelected(item);
   }
   protected void setFragment(Fragment fragment) {
       FragmentManager fragmentManager = getSupportFragmentManager();
       FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
       fragmentTransaction.replace(R.id.FragmentContainer, fragment);
       fragmentTransaction.commit();
   }
}
OUTCOME.
At this stage, if the user presses Back Button after second fragment is displayed, Android System will return to Home Screen.
We can add a flag to set the BackStack property so that when the user presses Back Button, the application returns to the first fragment.
MainActivity.java
package com.notarazi.myfragments2;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
public class MainActivity extends AppCompatActivity {
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       setFragment(new MainActivityFragment(),0);
       Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
       setSupportActionBar(toolbar);
       FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
       fab.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View view) {
               Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                       .setAction("Action"null).show();
           }
       });
   }
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       // Inflate the menu; this adds items to the action bar if it is present.
       getMenuInflater().inflate(R.menu.menu_main, menu);
       return true;
   }
   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
       // Handle action bar item clicks here. The action bar will
       // automatically handle clicks on the Home/Up button, so long
       // as you specify a parent activity in AndroidManifest.xml.
       int id = item.getItemId();
       //noinspection SimplifiableIfStatement
       if (id == R.id.action_settings) {
           return true;
       }
       if (id == R.id.action_send) {
           setFragment(new SubActivityFragment()1);
           return true;
       }
       return super.onOptionsItemSelected(item);
   }
   protected void setFragment(Fragment fragmentint backstackyes) {
       FragmentManager fragmentManager = getSupportFragmentManager();
       FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
       if (backstackyes==1) {fragmentTransaction.addToBackStack(null);}
       fragmentTransaction.replace(R.id.FragmentContainer, fragment);
       fragmentTransaction.commit();
   }
}
OUTCOME.
 -
Tap the Action Button. (The user sees the second fragment)
  
Tap the Back Button. (The user gets back the first fragment)
 
DOWNLOAD

.

No comments:

Post a Comment