Fragment
1.Fragment是什么
Fragment也可以叫为“片段”,但我觉得“片段”中文叫法有点生硬,还是保持叫Fragment比较好,它可以表示Activity中的行为或用户界面部分。我们可以在一个Activity中用多个Fragment组合来构建多窗格的UI,以及在多个Activity中重复使用某个Fragment。它有自己的生命周期,能接受自己的输入,并且可以在 Activity 运行时添加或删除Fragment(有点像在不同 Activity 中重复使用的“子 Activity”)。 简单来说,Fragment其实可以理解为一个具有自己生命周期的控件,只不过这个控件又有点特殊,它有自己的处理输入事件的能力,有自己的生命周期,又必须依赖于Activity,能互相通信和托管。
2.Fragment静态加载怎么用
静态加载,顾名思义,就是在布局文件中直接加载Fragment。在XML文件中,利用Fragment标签即可实现静态加载Fragment。
<fragment
android:id="@+id/fragment1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.example.administrator.fragment.Fragment1"/>
其中,name对应自己写的Fragment类,id对应该fragment控件的唯一表示,不可为空,否则会报错。
对应的Fragment1类必须继承Fragment类,并在onCreateView中实现其与layout文件的对应:
public class Fragment1 extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.fragment_1,container,false);
return view;
}
}
可以在加载Fragment的Activity中,直接与FindViewByID方法来获取Fragment的layout下对应的控件:
private void init() {
mbutton= (Button) findViewById(R.id.button2);
mtv= (TextView) findViewById(R.id.textview);
mbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mtv.setText("转换成功");
}
});
}
3.Fragment动态加载怎么用
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false" >
</LinearLayout>
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Display display = getWindowManager().getDefaultDisplay();
if (display.getWidth() > display.getHeight()) {
Fragment1 fragment1 = new Fragment1();
getFragmentManager().beginTransaction().replace(R.id.main_layout, fragment1).commit();
} else {
Fragment2 fragment2 = new Fragment2();
getFragmentManager().beginTransaction().replace(R.id.main_layout, fragment2).commit();
}
}
}
4.ViewPager+Fragment实现页卡滑动
<android.support.v4.view.ViewPager
android:id="@+id/viewpager_a"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v4.view.ViewPager>
ActivityA:
public class ActivityA extends AppCompatActivity {
private ViewPager viewPager;
private List<Fragment> fragmentList = new ArrayList<>();
private FragmentM fragmentM;
private FragmentN fragmentN;
private MyPagerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_activity);
bindID();
fragmentM = new FragmentM();
fragmentN = new FragmentN();
//填充数据
fragmentList.add(fragmentM);
fragmentList.add(fragmentN);
adapter = new MyPagerAdapter(getSupportFragmentManager(),fragmentList);
viewPager.setAdapter(adapter);
}
private void bindID() {
viewPager = findViewById(R.id.viewpager_a);
}
}
MyPagerAdapter:
public class MyPagerAdapter extends FragmentPagerAdapter{
private List<Fragment> mfragmentList;
public MyPagerAdapter(FragmentManager fm,List<Fragment> fragmentList) {
super(fm);
this.mfragmentList = fragmentList;
}
@Override
public Fragment getItem(int position) {
return mfragmentList.get(position);
}
@Override
public int getCount() {
return mfragmentList.size();
}
}
5.Fragment生命周期
onAttach()
Fragment和Activity建立关联的时候调用,被附加到Activity中去。
onCreate()
系统会在创建Fragment时调用此方法。可以初始化一段资源文件等等。
onCreateView()
系统会在Fragment首次绘制其用户界面时调用此方法。 要想为Fragment绘制 UI,从该方法中返回的 View 必须是Fragment布局的根视图。如果Fragment未提供 UI,您可以返回 null。
onViewCreated()
在Fragment被绘制后,调用此方法,可以初始化控件资源。
onActivityCreated()
当onCreate(),onCreateView(),onViewCreated()方法执行完后调用,也就是Activity被渲染绘制出来后。
onPause()
系统将此方法作为用户离开Fragment的第一个信号(但并不总是意味着此Fragment会被销毁)进行调用。 通常可以在此方法内确认在当前用户会话结束后仍然有效的任何更改(因为用户可能不会返回)。
onDestroyView()
Fragment中的布局被移除时调用。
onDetach()
Fragment和Activity解除关联的时候调用。
但需要注一点是:除了onCreateView,其他的所有方法如果你重写了,必须调用父类对于该方法的实现。