Easy to understand
Fragment
What is fragment?
Is it another type of Activity?
Does it replace Activity?
Or is it a new component ?
What is fragment?
Is it another type of Activity?
Does it replace Activity?
Or is it a new component ?
It is a modular section of an activity!!
Relationship with Activity
Embedded in an activity surely
Depend on activity lifecycle
Inside activity’s view hierarchy
Fragment advantage
Multi-pane UI support
Reuse component
Add or remove component dynamically
When to use fragment
Multi-pane UI support
How to use fragment
1 <fragment
2 android:id="@+id/list"
3 android:name=“com.new.ExampleFragment"
4 android:layout_width="match_parent"
5 android:layout_height="match_parent" />
Inside the activity’s layout
Add fragment programmatically
1 FragmentManager fm = getFragmentManager();
2 FragmentTransaction ft = fm.beginTransaction();
3 ExampleFragment fragment = new ExampleFragment();
4 ft.add(R.id.fragment_container, fragment);
5 ft.commit();
1 <FrameLayout
2 android:id="@+id/fragment_container"
3 android:layout_width="wrap_content"
4 android:layout_height=“wrap_content"/>
Fragment Transactions
1 FragmentTransaction ft = fm.beginTransaction();
2 ft.add(R.id.fragment_container, fragment);
3 ft.replace(R.id.fragment_container, fragment);
Modify fragment
4 ft.show(fragment)
5 ft.hide(fragment)
6 ft.remove(fragment)
Modify fragment already in activity
Set transition style
7 ft.setTransition(TRANSIT_FRAGMENT_CLOSE)
8 ft.setCustomAnimations(entet,exit)
Fragment Communication
Just like activity communication directly?
Fragment Communication
Just like activity communication directly?
Communicate through activity !
Main Activity
fragment
Controller
Main Activity
fragment
Controller
1 public class ChannelDetailFragment extends Fragment {
2 private OnChannelClickListener mCallback;
3
4 public interface OnChannelClickListener {
5 public void onChannelClick(int channelNumber);
6 }
7 @Override
8 public void onAttach(Activity activity) {
9 super.onAttach(activity);
10 try {
11 mCallback = (OnChannelClickListener) activity;
12 } catch (ClassCastException e) {
13 throw new ClassCastException(activity.toString()
14 + " must implement OnChannelClickListener");
15 }
16 }
17 public boolean onClick(View v) {
18 mCallback.onChannelClick(channelNumber);
19 }
In fragment file
In activity file
1 public class Activity extends Activity
2 implements OnChannelClickListener {
3
4 @Override
5 public void onChannelClick(int channelNumber){
6 // do something or open another fragment.
7 }
8 }
Fragment view
Use setContentView() to set view?
Fragment view
Use setContentView() to set view?
1 @Override
2 public View onCreateView(LayoutInflater inflater, ViewGroup
3 container, Bundle savedInstanceState) {
4 View root = inflater.inflate(R.layout.fragment_layout,
5 container, false);
6 //init other view
7 return root;
8 }
Use onCreateView callback to set view !
Fragment tips
Toast.makeText(getActivity(), "Mission complete",
Toast.LENGTH_LONG);
Get context from activity
Add to BackStack
1 FragmentManager fm = getFragmentManager();
2 FragmentTransaction ft = fm.beginTransaction();
3 ft.replace(R.id.fragment_container, fragment);
4 ft.addToBackStack(null);
Import v4 or origin version
1 import android.support.v4.app.FragmentActivity;
2 import android.support.v4.app.FragmentManager;
3 import android.support.v4.app.FragmentTransaction;
4 import android.support.v4.app.Fragment;
1 import android.app.Activity;
2 import android.app.FragmentManager;
3 import android.app.FragmentTransaction;
4 import android.app.Fragment;
Use new Fragment() or
Fragment.newInstance()?
1 ChannelFragment fragment = new ChannelFragment();
2 Bundle args = new Bundle();
3 args.putInt(CHANNEL_PAGE_INDEX, index);
4 fragment.setArguments(args);
1 public static ChannelFragment newInstance(int index) {
2 ChannelFragment fragment = new ChannelFragment();
3 Bundle args = new Bundle();
4 args.putInt(CHANNEL_PAGE_INDEX, index);
5 fragment.setArguments(args);
6 return fragment;
7 }
ChannelFragment.newInstance(index);
Use static factory method for better!
Thank you!
Fantasy

深入淺出談Fragment

  • 1.
  • 2.
    What is fragment? Isit another type of Activity? Does it replace Activity? Or is it a new component ?
  • 3.
    What is fragment? Isit another type of Activity? Does it replace Activity? Or is it a new component ? It is a modular section of an activity!!
  • 4.
    Relationship with Activity Embeddedin an activity surely Depend on activity lifecycle Inside activity’s view hierarchy
  • 5.
    Fragment advantage Multi-pane UIsupport Reuse component Add or remove component dynamically
  • 6.
    When to usefragment
  • 7.
  • 13.
    How to usefragment 1 <fragment 2 android:id="@+id/list" 3 android:name=“com.new.ExampleFragment" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" /> Inside the activity’s layout
  • 14.
    Add fragment programmatically 1FragmentManager fm = getFragmentManager(); 2 FragmentTransaction ft = fm.beginTransaction(); 3 ExampleFragment fragment = new ExampleFragment(); 4 ft.add(R.id.fragment_container, fragment); 5 ft.commit(); 1 <FrameLayout 2 android:id="@+id/fragment_container" 3 android:layout_width="wrap_content" 4 android:layout_height=“wrap_content"/>
  • 15.
    Fragment Transactions 1 FragmentTransactionft = fm.beginTransaction(); 2 ft.add(R.id.fragment_container, fragment); 3 ft.replace(R.id.fragment_container, fragment); Modify fragment 4 ft.show(fragment) 5 ft.hide(fragment) 6 ft.remove(fragment) Modify fragment already in activity Set transition style 7 ft.setTransition(TRANSIT_FRAGMENT_CLOSE) 8 ft.setCustomAnimations(entet,exit)
  • 16.
    Fragment Communication Just likeactivity communication directly?
  • 17.
    Fragment Communication Just likeactivity communication directly? Communicate through activity !
  • 18.
  • 19.
  • 20.
    1 public classChannelDetailFragment extends Fragment { 2 private OnChannelClickListener mCallback; 3 4 public interface OnChannelClickListener { 5 public void onChannelClick(int channelNumber); 6 } 7 @Override 8 public void onAttach(Activity activity) { 9 super.onAttach(activity); 10 try { 11 mCallback = (OnChannelClickListener) activity; 12 } catch (ClassCastException e) { 13 throw new ClassCastException(activity.toString() 14 + " must implement OnChannelClickListener"); 15 } 16 } 17 public boolean onClick(View v) { 18 mCallback.onChannelClick(channelNumber); 19 } In fragment file
  • 21.
    In activity file 1public class Activity extends Activity 2 implements OnChannelClickListener { 3 4 @Override 5 public void onChannelClick(int channelNumber){ 6 // do something or open another fragment. 7 } 8 }
  • 22.
  • 23.
    Fragment view Use setContentView()to set view? 1 @Override 2 public View onCreateView(LayoutInflater inflater, ViewGroup 3 container, Bundle savedInstanceState) { 4 View root = inflater.inflate(R.layout.fragment_layout, 5 container, false); 6 //init other view 7 return root; 8 } Use onCreateView callback to set view !
  • 24.
    Fragment tips Toast.makeText(getActivity(), "Missioncomplete", Toast.LENGTH_LONG); Get context from activity Add to BackStack 1 FragmentManager fm = getFragmentManager(); 2 FragmentTransaction ft = fm.beginTransaction(); 3 ft.replace(R.id.fragment_container, fragment); 4 ft.addToBackStack(null);
  • 25.
    Import v4 ororigin version 1 import android.support.v4.app.FragmentActivity; 2 import android.support.v4.app.FragmentManager; 3 import android.support.v4.app.FragmentTransaction; 4 import android.support.v4.app.Fragment; 1 import android.app.Activity; 2 import android.app.FragmentManager; 3 import android.app.FragmentTransaction; 4 import android.app.Fragment;
  • 26.
    Use new Fragment()or Fragment.newInstance()? 1 ChannelFragment fragment = new ChannelFragment(); 2 Bundle args = new Bundle(); 3 args.putInt(CHANNEL_PAGE_INDEX, index); 4 fragment.setArguments(args);
  • 27.
    1 public staticChannelFragment newInstance(int index) { 2 ChannelFragment fragment = new ChannelFragment(); 3 Bundle args = new Bundle(); 4 args.putInt(CHANNEL_PAGE_INDEX, index); 5 fragment.setArguments(args); 6 return fragment; 7 } ChannelFragment.newInstance(index); Use static factory method for better!
  • 28.