首先新建一个头部布局:main_search.xml在里面定义头部搜索的内容
具体代码
然后再fragment_main.xml中加载进去
即可。
使用ViewPager,来绑定适配器,适配器中是存放你要展示的数据。
在fragment_main中加个适配器布局
主界面视图中 绑定ViewPager和适配器
/**
* 主界面视图
*/
public class MainFragment extends Fragment {
//传进的广告图片的数组
protected int[] icons={R.mipmap.header_pic_ad1,R.mipmap.header_pic_ad2,R.mipmap.header_pic_ad1};
private ViewPager mVpagerHeaderAd;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_main,container,false);
}
//在fragment被创建的时候绑定ViewPager
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mVpagerHeaderAd=getView().findViewById(R.id.main_vPager_ad);
//ViewPager绑定适配器 和数据
mVpagerHeaderAd.setAdapter(new MainHeaderAdAdapter(getActivity(), DataUtil.getHeaderInfo(getActivity(),icons)));
}
}
新建一个MainHeaderAdAdapter适配器类继承适配器
public class MainHeaderAdAdapter extends PagerAdapter {
protected Context context;
protected List images;//成员变量
//构造函数赋值操作 把参数值赋值给成员变量
public MainHeaderAdAdapter(Context context, List images) {
this.context = context;
this.images = images;//
}
@Override
public int getCount() {
return null != images ? images.size() : 0;//如果集合不为空,则返回集合大小,否则返回0
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
container.addView(images.get(position));//给容器添加图片
return images.get(position);//返回图片
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(images.get(position));//移除view
}
}
绑定适配器数据的工具类
/**
* 绑定数据的工具类
*/
public class DataUtil {
//第一个参数是上下文,第二个参数是图标数组
public static List getHeaderInfo(Context context,int icons[]){
List datas=new ArrayList<>();
for(int i=0;i
到这里就完成了
整体思路:
首先,在xml布局通scrollview中嵌套一个RecycleView来回收复原的视图并创建一个要显示的View(item_main_menu.xml)
自定义RecycleView继承RecycleView.Adapter,重写多个方法,绑定数据和视图
然后在Fragment_Main绑定RecycleView的Adapter适配器装数据
最后通过自定义RecycView调用setLayoutManager(new GridLayoutManager(getActivity(),4))方法,展示成网格状的菜单,
呈每行4列的形状。
RecyclerView是support-v7包中的新组件,是一个强大的滑动组件
与经典的ListView相比,同样拥有item回收复用的功能,这一点从它的名字Recyclerview即回收view也可以看出。
代码实现:
在fragment_main.xml中添加RecycleView,如果没有要导入依赖包File->project structure->选中你要添加到的modules->dependencies->+号->添加Libray dependencies->
/**
* 集合
*/
public class Menu {
public int icon;//菜单图标
public String menuName;//菜单名称
public Menu(int icon, String menuName) {
this.icon = icon;
this.menuName = menuName;
}
}
//主菜单的数据
public static List
- 飞机票
- 住酒店
- 去旅游
- 周边游
- 买门票
- 火车票
- 汽车票
- 领里程
public class MainMenuAdapter extends RecyclerView.Adapter {
//成员变量
Context context;
List menus;
public MainMenuAdapter(Context context, List menus) {
this.context = context;
this.menus = menus;//将传进来的参数赋值给成员变量
}
@Override
//onCreateViewHolder()负责为Item创建视图
public MainMenuViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new MainMenuViewHolder(LayoutInflater.from(context).inflate(R.layout.item_main_menu, null));
}
@Override
//onBindViewHolder()负责将数据绑定到Item的视图上
public void onBindViewHolder(MainMenuViewHolder holder, int position) {
Menu menu = menus.get(position);//获取列表数据的第几个数据
holder.mImgMenuIcon.setImageResource(menu.icon);//图标获取数据
holder.mTextMenuName.setText(menu.menuName);//图标名称获取数据
}
@Override
public int getItemCount() {
return null != menus ? menus.size() : 0;//如果menus不为空,返回它的大小,否则返回0
}
class MainMenuViewHolder extends RecyclerView.ViewHolder {
public ImageView mImgMenuIcon;
public TextView mTextMenuName;
public MainMenuViewHolder(View itemView) {
super(itemView);
mImgMenuIcon=itemView.findViewById(R.id.img_menu_icon);
mTextMenuName=itemView.findViewById(R.id.name_menu_icon);
}
}}
6-MainFragment.java中绑定RecycleView的适配器 显示
/**
* 主界面视图
*/
public class MainFragment extends Fragment {
//主菜单的图标数据
protected int[] menuIcons={R.mipmap.menu_airport,R.mipmap.menu_hatol,
R.mipmap.menu_trav, R.mipmap.menu_nearby,
R.mipmap.menu_ticket,R.mipmap.menu_train,
R.mipmap.menu_car,R.mipmap.menu_course };
String[] menusNames;//主菜单图标名称数组
private ViewPager mVpagerHeaderAd;//广告头部
private RecyclerView mRecycleViewMenu;//主菜单
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_main,container,false);
}
//在fragment被创建的时候绑定ViewPager
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//获取主菜单名称数组的数据
menusNames=getActivity().getResources().getStringArray(R.array.main_menu);
//recycleView的绑定
mRecycleViewMenu=getView().findViewById(R.id.recycleview_maim_menu);
//主菜单设置适配器()
//布局样式(网格样式(当前activity,4列))
mRecycleViewMenu.setLayoutManager(new GridLayoutManager(getActivity(),4));
mRecycleViewMenu.setAdapter(new MainMenuAdapter(getActivity(),DataUtil.getMainMenu(menuIcons,menusNames)));
}
}
到这里就完成啦