Fragment
Fragment的意思
*fragment中文翻译过来就是碎片*
Fragment 能解决什么问题
fragment的出现就是为了解决局部布局的问题,而且使用Fragment可以在一个activity的不同界面里面灵活的切换,而且还可以解决不同屏幕分辩率的问题。
Fragment 的优点
第一点就是可以在不同界面实现灵活的跳转,第二点就是解决activity间的不流畅,第三点就是Fragment 可以管理自己的生命周期和布局,最后一点就是他不需要在AndroidManifest注册,就可以直接使用。
Fragment 的注意点
如果需要兼容4.0以下的系统,需要引用v4下的Fragment
Fragment 静态加载
第一步先新建fragment包,在包里面创建fragmentOne和fragmentTwo,特别注意的是创建这两个fragment的时候底下两个√要去掉,第二步就是在main的xml文件中,修改布局和添加帧布局,最后一点要导的是APP的包,记住fragment里面要返回view。
<TextView
android:layout_width="match_parent"
android:layout_height="100dp"
android:gravity="center"
android:text="Hello World!"
android:textSize="20sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<fragment
android:id="@+id/f_one"
android:name="fragment.FragmentOne"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<fragment
android:id="@+id/f_two"
android:name="fragment.FragmentTwo"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
View view1=inflater.inflate(R.layout.fragment_two, container, false);
return view1;
Fragment 动态加载
第一步就是新建一个新的tianmaoactivity,修改一下自己的布局,在原本布局里面嵌入一个相对布局,添加两个按钮,在布局外面加上一个帧布局。
第二步就是创建fragment帧布局,记住返回的是view,改一下背景颜色,最后在activity里面绑定id和添加监听事件,调用onclick的方法
<LinearLayout
android:layout_width="100dp"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/nan_btn"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="男装"
/>
<Button
android:id="@+id/nv_btn"
android:layout_width="match_parent"
android:layout_height="50dp"
android:text="女装"
/>
</LinearLayout>
<FrameLayout
android:id="@+id/shop_content"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
View v2=inflater.inflate(R.layout.fragment_nan, container, false);
return v2;
View v1 = inflater.inflate(R.layout.fragment_nv, container, false);
return v1;
底下的一段代码就是,在tianmaoactivity里面创建FragmentManager对象和创建FragmentTransaction对象,在switch语句里面,这时候我们需要判断一下是不是真的存在fragmentNan或fragmentNv,如果没有就需要创建新的,最后一步记得要提交。
@Override
public void onClick(View view) {
FragmentManager manager=getFragmentManager();//创建FragmentManager对象
FragmentTransaction transaction=manager.beginTransaction();//创建FragmentTransaction对象
switch (view.getId()) {
case R.id.nan_btn:
if(fragmentNan==null){
fragmentNan=new FragmentNan();
}
transaction.replace(R.id.shop_content,fragmentNan);
break;
case R.id.nv_btn:
//显示女装
if(fragmentNv==null){
fragmentNv=new FragmentNv();
}
transaction.replace(R.id.shop_content,fragmentNv);
break;
default:
break;
}
transaction.commit();//最后一步要提交
ViewPager+fragment实现页卡切换
第一步就是先创建adapter的包,然后创建一个MyPagerAdapter来继承FragmentPagerAdapter,然后使用快捷键Alt加回车键。
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();
}
第二步就是在fragment包里面创建三个空的fragment,这边导的包是v4下面的,然后在activity_wx里面修改一下布局,使用viewPager标签,给ViewPager赋上id。
<android.support.v4.view.ViewPager
android:id="@+id/wx_vp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/wx_bottom">
</android.support.v4.view.ViewPager>
第三步就是使用一个嵌入式的线性布局,在里面添加三个button按钮,赋上各自的id,这边使用权重属性。
<LinearLayout
android:id="@+id/wx_bottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal">
<Button
android:id="@+id/contact_btn"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:text="联系人" />
<Button
android:id="@+id/friend_btn"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:text="朋友圈" />
<Button
android:id="@+id/news_btn"
android:layout_width="0dp"
android:layout_height="50dp"
android:layout_weight="1"
android:text="动态" />
</LinearLayout>
第四步在WxActivity里面定义属性,
private Button contactBtn;
private Button friendBtn;
private Button newsBtn;
private ContactFragment contactFragment;
private FriendFragment friendFragment;
private NewsFragment newsFragment;
private List<Fragment> fragmentList = new ArrayList<>();
private ViewPager viewPager;
接下来就是熟悉的绑定id和添加监听事件了
private void bindID() {
contactBtn = findViewById(R.id.contact_btn);
friendBtn = findViewById(R.id.friend_btn);
newsBtn = findViewById(R.id.news_btn);
contactBtn.setOnClickListener(this);
friendBtn.setOnClickListener(this);
newsBtn.setOnClickListener(this);
}
底下的这段代码就是创建新的三个界面的fragment对象,然后添加到定义的 fragmentList里面,调用onclick方法,在switch语句里面,如果你想点那个页面,就到那个页面,那么可以使用viewPager.setCurrentItem()方法,
contactFragment = new ContactFragment();
friendFragment = new FriendFragment();
newsFragment = new NewsFragment();
fragmentList.add(contactFragment);
fragmentList.add(friendFragment);
fragmentList.add(newsFragment);
最后一步就是创建适配器和绑定适配器了。
//创建适配器
MyPagerAdapter adapter = new MyPagerAdapter(getSupportFragmentManager(), fragmentList);
//绑定适配器
viewPager.setAdapter(adapter);