03.06-Fragment知识点
1.什么是Fragment?
Fragment是Android3.0(API level 11)开始引入的新技术。为了提高代码的重用性和改善用户体验,我们将Activity中的UI组件进行分组和模块化管理。这些分组后的UI组件就是Fragment。
2.用Fragment可以解决哪些问题?
使用Fragment可以在Activity中实现页面的灵活切换;解决页面局部布局问题,通过Fragment设计的布局可以可以灵活的解决不同屏幕分辨率的适配问题,提高程序员的工作效率。
3.Fragment静态加载方法:
.建立一个Activity和一个Fragment文件;
.根据具体要求对Fragment.xml进行布局;
.通过<fragment>标签将Fragment页面放入activity.aml里来。
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
>
<fragment
android:id="@+id/fragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:name="com.example.lenovo.myapplication.TestkFragment"
/>
<fragment
android:id="@+id/fragment1"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:name="com.example.lenovo.myapplication.Fragment.Fragment_test1"
/>
</LinearLayout>
.静态加载注意点:设置<fragment>标签时注意加上id和name。
4.Fragment动态加载方法:
.建立一个Activity和两或多个Fragment文件;
.对Activity.xml文件进行布局。将其分为两部分,固定区域和Fragment滑动区域;
代码如下:
固定区域,如按钮之类的。
<LinearLayout
android:layout_width="200dp"
android:layout_height="match_parent"
android:orientation="vertical"
>
<Button
android:id="@+id/man_btn"
android:layout_width="100dp"
android:layout_height="80dp"
android:text="man"
android:textSize="20sp"
/>
<Button
android:id="@+id/woman_btn"
android:layout_width="100dp"
android:layout_height="80dp"
android:text="woman"
android:textSize="20sp"
/>
</LinearLayout>
Fragment滑动区域
<FrameLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
.在Activity.java中定义Button和Fragment
---绑定ID---添加监听---添加点击事件---
.用FragmentManger、FagmentTransaction方法管理Fragment
代码如下:
public class TianmallActivity extends AppCompatActivity implements View.OnClickListener {
private Button manbtn;
private Button womanbtn;
private manFragment manfragment;
private womanFragment womanfragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tianmall);
bindID();
}
private void bindID() {
manbtn = findViewById(R.id.man_btn);
womanbtn = findViewById(R.id.woman_btn);
//设置监听
manbtn.setOnClickListener(this);
womanbtn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
FragmentManager manager = getFragmentManager();//创建FragmentManger对象
FragmentTransaction transaction = manager.beginTransaction();//创建FragmentTransaction对象
switch (view.getId()) {
case R.id.man_btn:
if (manfragment == null) {
manfragment = new manFragment();
}
transaction.replace(R.id.content, manfragment);
break;
case R.id.woman_btn:
if (womanfragment == null) {
womanfragment = new womanFragment();
}
transaction.replace(R.id.content, womanfragment);
break;
default:
break;
}
transaction.commit();//最后一步一定要提交
}
}
.动态加载注意点:使用FragmentTransaction方法最后一定要提交:transaction.commit();
5.使用ViewPager和Fragment结合
.建立一个Activity、两个或以上Fragment文件和一个Adapter适配器;
.在Activity.xml文件中使用ViewPager进行页卡切换
代码如下:
<android.support.v4.view.ViewPager
android:id="@+id/vp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/menu">
</android.support.v4.view.ViewPager>
.注意点:一定要写id和name
.配置FragmentAdapter适配器
代码如下:
public class WxAdapter extends FragmentPagerAdapter {
private List<Fragment> mFragmentlist;
public WxAdapter(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();
}
}
.Activity.java活动页面代码
代码如下:
public class WxActivity extends AppCompatActivity implements View.OnClickListener {
private Button newsBtn;
private Button contactBtn;
private Button friendBtn;
private ContactFragment contactFragment;
private FriendFragment friendFragment;
private NewsFragment newsFragment;
private ViewPager viewPager;
private List<Fragment> fragmentList=new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wx);
bindId();
newsFragment=new NewsFragment();
contactFragment=new ContactFragment();
friendFragment=new FriendFragment();
fragmentList.add(newsFragment);
fragmentList.add(contactFragment);
fragmentList.add(friendFragment);
//创建适配器
WxAdapter adapter=new WxAdapter(getSupportFragmentManager(),fragmentList);
//绑定适配器
viewPager.setAdapter(adapter);
}
private void bindId() {
newsBtn = findViewById(R.id.News_btn);
contactBtn = findViewById(R.id.Contact_btn);
friendBtn = findViewById(R.id.Friend_btn);
viewPager = findViewById(R.id.vp);
newsBtn.setOnClickListener(this);
contactBtn.setOnClickListener(this);
friendBtn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.News_btn:
viewPager.setCurrentItem(0);
break;
case R.id.Contact_btn:
viewPager.setCurrentItem(1);
break;
case R.id.Friend_btn:
viewPager.setCurrentItem(2);
break;
}
}
}