Tuesday, November 15, 2016

Fragment in Android

public class MainActivity extends AppCompatActivity {
    String TAG = "MainActivity";

    @Override 
 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.v(TAG, "<<screen>>");


        FragmentTransaction transaction = getFragmentManager().beginTransaction();
        FragmentMain fragmentMain = new FragmentMain();
        transaction.addToBackStack("fragmentMain");
        transaction.replace(R.id.container, fragmentMain);
        transaction.commit();

    }


    public boolean handleBackStack() {
        int count = getFragmentManager().getBackStackEntryCount();
        Log.v(TAG, String.valueOf(count));
        if (count == 1) {
            finish();
        } else {
            FragmentTransaction transaction = getFragmentManager().beginTransaction();
            getFragmentManager().popBackStackImmediate();
            transaction.commit();
        }
        return true;
    }


    //handle the hardware back press 
 @Override 
 public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            handleBackStack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}
public class FragmentMain extends Fragment {


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

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

        View view = inflater.inflate(R.layout.fragment_main, container, false);
        final Button mButtonFragmentMain=(Button)view.findViewById(R.id.button__fragment_main);

        Log.v("<< main fragment>>","<<screen>>");

        mButtonFragmentMain.setOnClickListener(new View.OnClickListener() {
            @Override 
 public void onClick(View view) {
                FragmentTransaction transaction = getFragmentManager().beginTransaction();
                FragmentChild fragmentChild = new FragmentChild();
                transaction.addToBackStack("fragmentChild");
                transaction.replace(R.id.container, fragmentChild);
                transaction.commit();

            }
        });


        return view;
    }
}
public class FragmentChild extends Fragment {


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


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

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



        return view;
    }
}
activity_main
<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout 
 xmlns:android="http://schemas.android.com/apk/res/android" 
 android:id="@+id/container" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:orientation="vertical">

</FrameLayout>
 
fragment_main
 
<RelativeLayout 
 xmlns:android="http://schemas.android.com/apk/res/android" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:paddingBottom="@dimen/activity_vertical_margin" 
 android:paddingLeft="@dimen/activity_horizontal_margin" 
 android:paddingRight="@dimen/activity_horizontal_margin" 
 android:paddingTop="@dimen/activity_vertical_margin">

    <TextView 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_centerHorizontal="true" 
 android:layout_marginTop="20dp" 
 android:text="Main Fragment Screen" 
 android:textSize="26sp" 
 android:textStyle="bold" />

    <Button 
 android:id="@+id/button__fragment_main" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_centerInParent="true" 
 android:paddingBottom="15dp" 
 android:paddingTop="15dp" 
 android:text="Open Child Fragment" 
 android:textSize="20sp" />
</RelativeLayout>
 
fragment_child
<RelativeLayout  
xmlns:android="http://schemas.android.com/apk/res/android" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:paddingBottom="@dimen/activity_vertical_margin" 
 android:paddingLeft="@dimen/activity_horizontal_margin" 
 android:paddingRight="@dimen/activity_horizontal_margin" 
 android:paddingTop="@dimen/activity_vertical_margin">

    <TextView 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:layout_centerInParent="true" 
 android:text="Child Fragment Screen" 
 android:textSize="26sp" 
 android:textStyle="bold" />
</RelativeLayout>

   

Android Expand RecyclerView

 
import libs 
compile 'com.bignerdranch.android:expandablerecyclerview:2.1.1' 
 
activity_expand
 
<?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:orientation="vertical">

  <android.support.v7.widget.RecyclerView 
 android:id="@+id/recycler_view" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" />
</LinearLayout>
 
item_subcategory_fragment_elv_group
 
<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout 
 xmlns:android="http://schemas.android.com/apk/res/android" 
 android:layout_width="match_parent" 
 android:orientation="vertical" 
 android:layout_height="48dp">
<TextView     
android:id="@+id/lblListHeader" 
 android:text="abc" 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" />
</LinearLayout>
 
item_subcategory_fragment_elv_child
 
<?xml version="1.0" encoding="utf-8"?>
 <LinearLayout  
xmlns:android="http://schemas.android.com/apk/res/android"     
android:layout_width="match_parent" 
 android:orientation="vertical" 
 android:layout_height="48dp">
<TextView 
 android:layout_width="wrap_content" 
 android:id="@+id/lblListItem" 
 android:layout_marginLeft="70dp" 
 android:layout_height="wrap_content" />
</LinearLayout>
    
public class MainActivity extends AppCompatActivity {
    String TAG = "MainActivity";
    RecyclerView recycler_view;

    @Override 
 protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_expand);
        List<ParentListItem> parentListItems = new ArrayList<>();
        List<SubcategoryParentListItem> listItems = new ArrayList<>();

        for (int i = 0; i < 50; i++) {
            SubcategoryParentListItem ob = new SubcategoryParentListItem();
            listItems.add(ob);
        }


        for (int i = 0; i < 100; i++) {
            SubcategoryParentListItem ob = new SubcategoryParentListItem();
            ob.setChildItemList(listItems);
            parentListItems.add(ob);
        }

        recycler_view = (RecyclerView) findViewById(R.id.recycler_view);
        RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
        recycler_view.setLayoutManager(mLayoutManager);
        recycler_view.setAdapter(new SubCategoryExpandableRecyclerAdapter(this, parentListItems));

    }
}
public class SubCategoryExpandableRecyclerAdapter extends ExpandableRecyclerAdapter<SubCategoryExpandableRecyclerAdapter.MyParentViewHolder, SubCategoryExpandableRecyclerAdapter.MyChildViewHolder> {
    private LayoutInflater mInflater;

    public SubCategoryExpandableRecyclerAdapter(Context context, List<ParentListItem> itemList) {
        super(itemList);
        mInflater = LayoutInflater.from(context);
    }

    @Override     
public MyParentViewHolder onCreateParentViewHolder(ViewGroup viewGroup) {
        View view = mInflater.inflate(R.layout.item_subcategory_fragment_elv_group, viewGroup, false);
        return new MyParentViewHolder(view);
    }

    @Override 
 public MyChildViewHolder onCreateChildViewHolder(ViewGroup viewGroup) {
        View view = mInflater.inflate(R.layout.item_subcategory_fragment_elv_child, viewGroup, false);
        return new MyChildViewHolder(view);
    }

    @Override 
 public void onBindParentViewHolder(MyParentViewHolder parentViewHolder, int position, ParentListItem parentListItem) {
        SubcategoryParentListItem subcategoryParentListItem = (SubcategoryParentListItem) parentListItem;
        // handler for row parent 
 parentViewHolder.lblListHeader.setText(subcategoryParentListItem.mTitle);

    }

    @Override 
 public void onBindChildViewHolder(MyChildViewHolder childViewHolder, int position, Object childListItem) {
        SubcategoryParentListItem subcategoryChildListItem = (SubcategoryParentListItem) childListItem;
        // handler for row child 
 childViewHolder.txtListChild.setText(subcategoryChildListItem.mTitle);

    }

    public class MyParentViewHolder extends ParentViewHolder {

        public TextView lblListHeader;

        public MyParentViewHolder(View itemView) {
            super(itemView);
            // init view parent 
 lblListHeader = (TextView) itemView.findViewById(R.id.lblListHeader);
        }
    }


    public class MyChildViewHolder extends ChildViewHolder {

        public TextView txtListChild;

        public MyChildViewHolder(View itemView) {
            super(itemView);
            // init view child list 
 txtListChild = (TextView) itemView.findViewById(R.id.lblListItem);
        }
    }
}
public class SubcategoryParentListItem implements ParentListItem {
    // object    public String mTitle;
    public List<SubcategoryParentListItem> mChildItemList;

    public SubcategoryParentListItem() {
        mTitle = "SubcategoryParentListItem";
    }

    @Override 
 public List<SubcategoryParentListItem> getChildItemList() {
        return mChildItemList;
    }

    public void setChildItemList(List<SubcategoryParentListItem> list) {
        mChildItemList = list;
    }

    @Override    public boolean isInitiallyExpanded() {
        return false;
    }
}