安卓之碎片Fragment

2016-03-15  本文已影响165人  优疏

public class MyFragment extends Fragment {
      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle saveInstanceState)  {
              View view = inflater.inflate(R.layout.my_fragment, container, false);
              return view;
      }
}

可以将碎片放在一个FrameLayout中,之后我们将在代码中替换FrameLayout里的内容,从而实现动态添加碎片的功能。

MyFragment fragment = new MyFragment();
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.right_layout, fragment);
ft.commit(); 

具体步骤:
1.创建待添加的碎片实例
2.获取到FragmentManager,在活动中可以直接调用getFragmentManager()方法得到
3.开启一个事务,通过调用beginTransaction()方法开启
4.向容器内添加碎片,一般使用repalce()方法实现,需要传入容器id和待添加的碎片
5.提交事务,调用commit()方法来完成
3)碎片中模拟返回栈
模仿类似于返回栈的效果,点击back可以回到上一个碎片,addToBackStack()方法可以用于将一个事务添加到返回栈中。

MyFragment fragment = new MyFragment();
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.right_layout, fragment);
ft.addToBackStack(null);
ft.commit(); 

一般传null值,效果是点击back,会发现程序并没有退出,而是回到了MyFragment界面,再次按下back才会退出。

  1. onAttach()
    当碎片和活动建立关联的时候调用。
  2. onCreateView()
    为碎片创建视图(加载布局)时调用。
  3. onActivityCreated()
    确保与碎片相关联的活动一定已经创建完毕的时候调用。
  4. onDestroyView()
    当与碎片关联的视图被移除的时候调用。
  5. onDetach()
    当碎片和活动解除关联的时候调用
    生命周期图如下:
Paste_Image.png
private View rootView;// 缓存Fragment view 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container,   Bundle savedInstanceState) {  
Log.i(TAG, "onCreateView");  
if (rootView == null)  {  
 rootView = inflater.inflate(R.layout.fragment_1, null);
} 
 // 缓存的rootView需要判断是否已经被加过parent,如果有parent需要从parent删除,
//要不然会发生这个rootview已经有parent的错误。
  ViewGroup parent = (ViewGroup) rootView.getParent();  
if (parent != null)  { 
  parent.removeView(rootView); 
 }
  return rootView;
 }
Paste_Image.png
import com.example.android.supportv4.R;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;i
mport android.support.v4.app.FragmentTabHost;
/** * This demonstrates how you can implement switching between the tabs of a * TabHost through fragments, using FragmentTabHost. */
public class FragmentTabs extends FragmentActivity {
    private FragmentTabHost mTabHost;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.fragment_tabs); 
       mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost); 
       mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
        mTabHost.addTab(mTabHost.newTabSpec("simple").setIndicator("Simple"), 
               FragmentStackSupport.CountingFragment.class, null);  
      mTabHost.addTab(mTabHost.newTabSpec("contacts").setIndicator("Contacts"),
                LoaderCursorSupport.CursorLoaderListFragment.class, null);  
      mTabHost.addTab(mTabHost.newTabSpec("custom").setIndicator("Custom"),   
             LoaderCustomSupport.AppListFragment.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("throttle").setIndicator("Throttle"),
                LoaderThrottleSupport.ThrottledLoaderListFragment.class, null); 
   }
}
上一篇 下一篇

猜你喜欢

热点阅读