一、静态注册:在活动中直接引用Fragment控件
1.1 创建碎片fraStaticAd
在onCreateView中设置视图并返回。
view = inflater.inflate(R.layout.fragment_fra_static_ad,container,false);
return view;
1.2 碎片布局
<TextView
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="广告"
android:textSize="20sp"
android:gravity="center"/>
<ImageView
android:id="@+id/iv_ad"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:src="@drawable/ad"
android:layout_margin="10dp"/>
1.3 在活动布局页面的name属性中引用碎片路径即可,一个碎片可被多个活动引用。
<fragment
android:id="@+id/fra_ad"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:name="com.example.seniorcontrol.fraStaticAd"/>
1.4 实现效果
二、动态注册:配合ViewPager
2.1 适配器FragmentStatePagerAdapter:此时的适配器不再使用PagerAdapter,改用FragmentStatePagerAdapter,适配器至少需要有信息队列+构造函数+功能函数
①信息队列
private ArrayList<Book> bookList = new ArrayList<Book>();
②构造函数:传入碎片管理器+信息队列
public bookFraPagerAdapter(FragmentManager fm,ArrayList<Book> mbooklist){
super(fm);
bookList = mbooklist;
}
③功能函数:获取碎片个数+指定位置的碎片+指定碎片的内容
//获取碎片个数
public int getCount(){
return bookList.size();
}
//获取指定位置的碎片
public Fragment getItem(int position){
return myDynamicFrament.newInstance(position,bookList.get(position).img,bookList.get(position).desc);
}
//获取指定碎片的内容(如标题)
public CharSequence getPageTitle(int position){
return bookList.get(position).name;
}
2.2 碎片代码:包含声明+获取碎片实例+创建碎片视图
①声明:视图对象+上下文对象+位置序号+事物信息
private View view;
private Context context;
private int mPosition;
private int mImgid;
private String mDesc;
private ImageView iv_dynamic;
private TextView tv_dynamic;
②获取碎片实例
public static myDynamicFrament newInstance(int position,int imgid,String desc){
myDynamicFrament fra = new myDynamicFrament();
Bundle bundle = new Bundle();
bundle.putInt("position",position);
bundle.putInt("imgid",imgid);
bundle.putString("desc",desc);
fra.setArguments(bundle);//把包裹塞给碎片
return fra;
}
③创建碎片视图
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.fragment_my_dynamic_frament, container, false);
context = getActivity();
//打开包裹
if(getArguments()!=null){
mPosition = getArguments().getInt("position",0);
mImgid = getArguments().getInt("imgid",0);
mDesc = getArguments().getString("desc");
}
//显示包裹信息
iv_dynamic = view.findViewById(R.id.iv_dynamic);
tv_dynamic = view.findViewById(R.id.tv_dynamic);
iv_dynamic.setImageResource(mImgid);
tv_dynamic.setText(mDesc);
return view;
}
2.3 活动页面代码:配合ViewPager引入碎片
private ViewPager vp_frabook;
private ArrayList<Book> frabook;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_fra_dynamic_book);
vp_frabook = (ViewPager)findViewById(R.id.vp_frabook);
frabook = Book.getBook();
bookFraPagerAdapter bookfraPagerAdapter = new bookFraPagerAdapter(getSupportFragmentManager(),frabook);
vp_frabook.setAdapter(bookfraPagerAdapter);
vp_frabook.setCurrentItem(0);
}
而活动布局仅需一个ViewPager控件即可。
<androidx.viewpager.widget.ViewPager
android:id="@+id/vp_frabook"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
2.4 实现效果