tareq3
11/21/2018 - 4:14 PM

Fragment

Fragment in android

Fragment in android for isolation.

The main reason we will use fragment is we are trying to implement  plug and play modules..
For Example 



Note for fragment:
1.	Fragment not should be Singleton .
2.	We should not use any static property in fragment
3.	For communication we must use Interface communicators. 
Creating instance in fragment:
public static MainActivity_Recycler_Fragment newInstance() {
    return new MainActivity_Recycler_Fragment();
}

using Instance in activity:
MainActivity_Recycler_Fragment.newInstance()


Context in Fragment:
Context mContext;

//Need to change the Cast Activity name on attach with any activity
@Override
public void onAttach(Context context) {
    super.onAttach(context);
    mContext = context;
}

For Activity in Fragment:
getActivity().getSystemService(Context.SEARCH_SERVICE);

For View in  Fragment:
mRecyclerView = getView().findViewById(R.id.listTodo_fragment);



Initial Script for a Fragment v4:
package com.mti.todo_app_with_firebase.UI;

import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.SearchView;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;



public class MainActivity_Recycler_Fragment extends Fragment {

    RecyclerView mRecyclerView;
    
    public static MainActivity_Recycler_Fragment newInstance() {
        return new MainActivity_Recycler_Fragment();
    }

    Context mContext;

    //Need to change the Cast Activity name on attach with any activity
    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mContext = context;
  }




    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        setHasOptionsMenu(true);// for having menu  function like onCreateOptionMenu in Fragment        return inflater.inflate(R.layout.recyclerview_fragment, container, false);

    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        mRecyclerView = getView().findViewById(R.id.listTodo_fragment);
    }

}



How to replace fragment in Activity:
private void replaceFragment(Bundle savedInstanceState) {
    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.listTodo_frame, MainActivity_Recycler_Fragment.newInstance())
                .commitNow();
    }
}

How to Add fragment in Activity:

private void initRecyclerViewFragment(Bundle savedInstanceState) {
    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.listTodo_frame, MainActivity_Recycler_Fragment.newInstance())
                .commitNow();
    }
}



Difference between replace and add:
 Recommended replace, if we use add it will keep traces of the fragments added on that container. Therefor when we will press back it will follow back trace


private void initRecyclerViewFragment(Bundle savedInstanceState) {
    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.listTodo_frame, MainActivity_Recycler_Fragment.newInstance())
                .commitNow();
    }
}

How to Remove Fragment from Activity:

private void removeFragment(){
    android.support.v4.app.Fragment fragment=getSupportFragmentManager().findFragmentById(R.id.listTodo_frame);
    if(fragment!=null){
        getSupportFragmentManager()
                .beginTransaction()
                .remove(fragment)
                .commit();
    }
}