引导页的轮播及轮播图

引导页布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".Guide_pager"><android.support.v4.view.ViewPagerandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/guide"></android.support.v4.view.ViewPager><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="20sp"android:textColor="#0B3EEC"android:layout_alignParentRight="true"android:layout_margin="10dp"android:id="@+id/guide_count_down"android:visibility="gone"/><RadioGroupandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"android:layout_alignParentBottom="true"android:layout_marginBottom="70dp"android:layout_centerHorizontal="true"><RadioButtonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:button="@null"android:drawableBottom="@drawable/banal"android:checked="true"android:id="@+id/guide_but1"/><RadioButtonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:button="@null"android:drawableBottom="@drawable/banal"android:id="@+id/guide_but2"/><RadioButtonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:button="@null"android:drawableBottom="@drawable/banal"android:id="@+id/guide_but3"/></RadioGroup></RelativeLayout>

引导页的完成

public class Guide_pager extends AppCompatActivity {ViewPager viewPager;TextView textView;RadioButton radioButton1,radioButton2,radioButton3;ArrayList<View> arrayList = new ArrayList<>();Timer timer,timer1;int p = 0;int count_down = 5;Handler handler;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_guide_pager);viewPager = findViewById(R.id.guide);textView = findViewById(R.id.guide_count_down);radioButton1 = findViewById(R.id.guide_but1);radioButton2 = findViewById(R.id.guide_but2);radioButton3 = findViewById(R.id.guide_but3);ImageView image1 = new ImageView(this);image1.setImageResource(R.mipmap.guide1);ImageView image2 = new ImageView(this);image2.setImageResource(R.mipmap.guide2);ImageView image3 = new ImageView(this);image3.setImageResource(R.mipmap.guide3);arrayList.add(image1);arrayList.add(image2);arrayList.add(image3);Guide_view_pager_adapter adapter = new Guide_view_pager_adapter(arrayList);viewPager.setAdapter(adapter);timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {handler.sendEmptyMessage(1001);if(p == arrayList.size()){p = -1;}}},1000,1500);handler = new Handler(){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if (msg.what == 1001){p++;viewPager.setCurrentItem(p);}if (msg.what == 1002){textView.setText("倒计时:"+count_down);count_down--;if(count_down==-1){timer.cancel();timer1.cancel();Intent intent = new Intent(Guide_pager.this, MainActivity.class);startActivity(intent);Guide_pager.this.finish();}}}};viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Overridepublic void onPageScrolled(int i, float v, int i1) {}@Overridepublic void onPageSelected(int i) {switch (i){case 0:radioButton1.setChecked(true);break;case 1:radioButton2.setChecked(true);break;case 2:radioButton3.setChecked(true);textView.setVisibility(View.VISIBLE);timer1 = new Timer();timer1.schedule(new TimerTask() {@Overridepublic void run() {handler.sendEmptyMessage(1002);}},0,1000);break;}}@Overridepublic void onPageScrollStateChanged(int i) {}});}
}

引导页ViewPager适配器

public class Guide_view_pager_adapter extends PagerAdapter {ArrayList<View> arrayList = new ArrayList<>();public Guide_view_pager_adapter(ArrayList<View> arrayList) {this.arrayList = arrayList;}@Overridepublic int getCount() {return arrayList.size();}@Overridepublic boolean isViewFromObject(@NonNull View view, @NonNull Object o) {return view == o;}@Overridepublic void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {container.removeView(arrayList.get(position));}@NonNull@Overridepublic Object instantiateItem(@NonNull ViewGroup container, int position) {container.addView(arrayList.get(position));return arrayList.get(position);}
}

主页底部按钮实现页面切换

public class MainActivity extends AppCompatActivity {RadioGroup home_rg;FrameLayout home_frame_layout;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main_activity);home_rg = findViewById(R.id.home_rg);home_frame_layout = findViewById(R.id.home_frame_layout);Home_page home_page = new Home_page();getSupportFragmentManager().beginTransaction().replace(R.id.home_frame_layout,home_page).commit();home_rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {switch (checkedId){case R.id.home_rb1:Home_page home_page = new Home_page();getSupportFragmentManager().beginTransaction().replace(R.id.home_frame_layout,home_page).addToBackStack("home_page").commit();break;case R.id.home_rb2:Kind kind = new Kind();getSupportFragmentManager().beginTransaction().replace(R.id.home_frame_layout,kind).commit();break;case R.id.home_rb3:Find find = new Find();getSupportFragmentManager().beginTransaction().replace(R.id.home_frame_layout,find).commit();break;case R.id.home_rb4:ShoppingCar shoppingCar = new ShoppingCar();getSupportFragmentManager().beginTransaction().replace(R.id.home_frame_layout,shoppingCar).commit();break;case R.id.home_rb5:My my = new My();getSupportFragmentManager().beginTransaction().replace(R.id.home_frame_layout,my).commit();break;}}});}
}

主界面布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><FrameLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/home_frame_layout"android:layout_above="@id/home_rg"></FrameLayout><RadioGroupandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:id="@+id/home_rg"android:layout_alignParentBottom="true"><RadioButtonandroid:layout_width="match_parent"android:layout_height="match_parent"android:button="@null"android:drawableTop="@drawable/home_pager_img"android:textColor="@drawable/home_pager_txt"android:text="首页"android:textSize="13sp"android:gravity="center"android:checked="true"android:id="@+id/home_rb1"android:layout_weight="1"/><RadioButtonandroid:layout_width="match_parent"android:layout_height="match_parent"android:button="@null"android:drawableTop="@drawable/kind_img"android:textColor="@drawable/home_pager_txt"android:text="分类"android:textSize="13sp"android:gravity="center"android:id="@+id/home_rb2"android:layout_weight="1"/><RadioButtonandroid:layout_width="match_parent"android:layout_height="match_parent"android:button="@null"android:drawableTop="@drawable/discover_img"android:textColor="@drawable/home_pager_txt"android:text="发现"android:textSize="13sp"android:gravity="center"android:id="@+id/home_rb3"android:layout_weight="1"/><RadioButtonandroid:layout_width="match_parent"android:layout_height="match_parent"android:button="@null"android:drawableTop="@drawable/shopping_car_img"android:textColor="@drawable/home_pager_txt"android:text="购物车"android:textSize="13sp"android:gravity="center"android:id="@+id/home_rb4"android:layout_weight="1"/><RadioButtonandroid:layout_width="match_parent"android:layout_height="match_parent"android:button="@null"android:drawableTop="@drawable/person_img"android:textColor="@drawable/home_pager_txt"android:text="我的"android:textSize="13sp"android:gravity="center"android:id="@+id/home_rb5"android:layout_weight="1"/></RadioGroup></RelativeLayout>

首页布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="150dp"><android.support.v4.view.ViewPagerandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/home_view_pager"android:background="#EC3535"></android.support.v4.view.ViewPager><RadioGroupandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"android:layout_alignParentBottom="true"android:layout_alignParentRight="true"android:layout_marginRight="10dp"android:id="@+id/home_radio_group"><RadioButtonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:button="@null"android:drawableTop="@drawable/banal"android:id="@+id/home_radio_button1"/><RadioButtonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:button="@null"android:drawableTop="@drawable/banal"android:id="@+id/home_radio_button2"/><RadioButtonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:button="@null"android:drawableTop="@drawable/banal"android:id="@+id/home_radio_button3"/><RadioButtonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:button="@null"android:drawableTop="@drawable/banal"android:id="@+id/home_radio_button4"/><RadioButtonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:button="@null"android:drawableTop="@drawable/banal"android:id="@+id/home_radio_button5"/></RadioGroup></RelativeLayout><GridViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:numColumns="2"android:id="@+id/home_grid_view"android:horizontalSpacing="10dp"android:verticalSpacing="10dp"android:columnWidth="150dp"android:stretchMode="spacingWidthUniform"></GridView>
</LinearLayout>

首页实现轮播图及商品传值

public class Home_page extends Fragment {ArrayList<View> arrayList = new ArrayList<>();Timer timer;int p = 0;static Handler handler;RadioButton b1,b2,b3,b4,b5;ViewPager  viewPager;GridView gridView;ArrayList<Map<String,String>> gridList;ArrayList<Map<String,String>> handle_arraylist = new ArrayList<>();@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = inflater.inflate(R.layout.home_pager, null);gridView = view.findViewById(R.id.home_grid_view);b1 = view.findViewById(R.id.home_radio_button1);b2 = view.findViewById(R.id.home_radio_button2);b3 = view.findViewById(R.id.home_radio_button3);b4 = view.findViewById(R.id.home_radio_button4);b5 = view.findViewById(R.id.home_radio_button5);viewPager = view.findViewById(R.id.home_view_pager);ImageView img1 = new ImageView(getActivity());img1.setImageResource(R.mipmap.home_viewpager1);ImageView img2 = new ImageView(getActivity());img2.setImageResource(R.mipmap.home_viewpager2);ImageView img3 = new ImageView(getActivity());img3.setImageResource(R.mipmap.home_viewpager3);ImageView img4 = new ImageView(getActivity());img4.setImageResource(R.mipmap.home_viewpager4);ImageView img5 = new ImageView(getActivity());img5.setImageResource(R.mipmap.home_viewpager5);arrayList.add(img1);arrayList.add(img2);arrayList.add(img3);arrayList.add(img4);arrayList.add(img5);Home_page_view_pager_adapter home_page_view_pager_adapter = new Home_page_view_pager_adapter(arrayList);viewPager.setAdapter(home_page_view_pager_adapter);timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {handler.sendEmptyMessage(1001);//实现轮播if (p == arrayList.size()){p = -1;}}},2000,2000);new MyThread01().start();handler = new Handler(){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if (msg.what == 1001){p++;viewPager.setCurrentItem(p);}if(msg.what == 100){gridList = (ArrayList<Map<String, String>>) msg.obj;Home_page_grid_view_adapter home_page_grid_view_adapter = new Home_page_grid_view_adapter(Home_page.this);gridView.setAdapter(home_page_grid_view_adapter);}}};viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {@Overridepublic void onPageScrolled(int i, float v, int i1) {}@Overridepublic void onPageSelected(int i) {switch (i){case 0:b1.setChecked(true);break;case 1:b2.setChecked(true);break;case 2:b3.setChecked(true);break;case 3:b4.setChecked(true);break;case 4:b5.setChecked(true);break;}}@Overridepublic void onPageScrollStateChanged(int i) {}});gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, final int position, long id) {final PopupWindow popupWindow = new PopupWindow(Home_page.this.getActivity());popupWindow.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);View view1 = View.inflate(getActivity(),R.layout.home_gridview_popupwindow,null);popupWindow.setContentView(view1);ImageView img = view1.findViewById(R.id.popup_img);ImageButton add = view1.findViewById(R.id.popup_add);ImageButton reduce = view1.findViewById(R.id.popup_reduce);final TextView count = view1.findViewById(R.id.popup_buy_count);RadioGroup group = view1.findViewById(R.id.popup_amount);final RadioButton small = view1.findViewById(R.id.popup_window_small);RadioButton middle = view1.findViewById(R.id.popup_window_middle);final RadioButton big = view1.findViewById(R.id.popup_window_big);Button btn = view1.findViewById(R.id.popup_add_car);Glide.with(getActivity()).load(gridList.get(position).get("pic")).apply(RequestOptions.bitmapTransform(new CircleCrop())).into(img);add.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {int i = Integer.parseInt(count.getText().toString());i++;count.setText(i+"");}});reduce.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {int i = Integer.parseInt(count.getText().toString());if (i == 0){Toast.makeText(getActivity(), "亲,已经没有了", Toast.LENGTH_SHORT).show();return;}i--;count.setText(i+"");}});View view2 = View.inflate(getActivity(),R.layout.main_activity,null);popupWindow.setOutsideTouchable(true);popupWindow.showAtLocation(view2, Gravity.BOTTOM,0,0);btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Message obtain = Message.obtain();obtain.what = 2001;Map<String,String> map = new HashMap<>();map.put("title",gridList.get(position).get("title"));map.put("pic",gridList.get(position).get("pic"));map.put("food_str",gridList.get(position).get("food_str"));String large = "中分" ;if (small.isChecked()){large = "小份";}if (big.isChecked()){large = "大份";}map.put("large",large);String s = count.getText().toString();int choose_count = Integer.parseInt(s);if (choose_count == 0){Toast.makeText(getActivity(), "亲,要几份呢", Toast.LENGTH_SHORT).show();return;}map.put("count",s);for (int i = 0; i < handle_arraylist.size(); i++){String title = handle_arraylist.get(i).get("title");String large1 = handle_arraylist.get(i).get("large");if (title.equals(map.get("title"))&&large1.equals(map.get("large"))){int oldCount = Integer.parseInt(handle_arraylist.get(i).get("count"));handle_arraylist.get(i).put("count",choose_count+oldCount+"");obtain.obj = handle_arraylist;ShoppingCar.handler.sendMessage(obtain);Toast.makeText(getActivity(), "添加成功", Toast.LENGTH_SHORT).show();popupWindow.dismiss();return;}}handle_arraylist.add(map);obtain.obj = handle_arraylist;ShoppingCar.handler.sendMessage(obtain);Toast.makeText(getActivity(), "添加成功", Toast.LENGTH_SHORT).show();popupWindow.dismiss();}});}});return view;}
}

首页的GridView数据线程

public class MyThread01 extends Thread {@Overridepublic void run() {super.run();try {URL url = new URL("http://www.qubaobei.com/ios/cf/dish_list.php?stage_id=1&limit=30&page=1");HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();urlConnection.connect();urlConnection.setRequestMethod("GET");InputStream inputStream = urlConnection.getInputStream();byte[] bytes = new byte[1024 * 6];int len = 0;StringBuilder sb = new StringBuilder();BufferedInputStream bis = new BufferedInputStream(inputStream);while((len = bis.read(bytes)) !=-1){sb.append(new String(bytes,0,len));}JSONObject jsonObject = new JSONObject(sb.toString());JSONArray data = jsonObject.getJSONArray("data");ArrayList<Map<String,String>> arrayList = new ArrayList<>();for (int i = 0; i <data.length(); i++){Map<String,String> map = new HashMap<>();JSONObject jsonObject1 = data.getJSONObject(i);String pic = jsonObject1.getString("pic");String title = jsonObject1.getString("title");String food_str = jsonObject1.getString("food_str");map.put("pic",pic);map.put("title",title);map.put("food_str",food_str);arrayList.add(map);}Message obtain = Message.obtain();obtain.what = 100;obtain.obj = arrayList;Home_page.handler.sendMessage(obtain);} catch (MalformedURLException e) {e.printStackTrace();}  catch (JSONException e) {e.printStackTrace();} catch (ProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}

首页ViewPager适配器

public class Home_page_view_pager_adapter extends PagerAdapter {ArrayList<View> arrayList;public Home_page_view_pager_adapter(ArrayList<View> arrayList) {this.arrayList = arrayList;}@Overridepublic int getCount() {return arrayList.size();}@Overridepublic boolean isViewFromObject(@NonNull View view, @NonNull Object o) {return view == o;}@Overridepublic void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {container.removeView(arrayList.get(position));}@NonNull@Overridepublic Object instantiateItem(@NonNull ViewGroup container, int position) {container.addView(arrayList.get(position));return arrayList.get(position);}
}

首页GridView适配器

public class Home_page_grid_view_adapter extends BaseAdapter {Home_page home_page;public Home_page_grid_view_adapter(Home_page home_page) {this.home_page = home_page;}@Overridepublic int getCount() {return home_page.gridList.size();}@Overridepublic Object getItem(int position) {return home_page.gridList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder viewHolder;if(convertView == null){viewHolder = new ViewHolder();convertView = View.inflate(home_page.getActivity(),R.layout.home_gridview,null);viewHolder.imageView = convertView.findViewById(R.id.home_grid_img);viewHolder.textView = convertView.findViewById(R.id.home_grid_txt);convertView.setTag(viewHolder);}else {viewHolder = (ViewHolder) convertView.getTag();}viewHolder.textView.setText(home_page.gridList.get(position).get("title"));Glide.with(home_page.getActivity()).load(home_page.gridList.get(position).get("pic")).into(viewHolder.imageView);return convertView;}
}class ViewHolder{ImageView imageView;TextView textView;
}

购物车接受首页发送的数据并展示

public class ShoppingCar extends Fragment {static ArrayList<Map<String,String>> arrayList;static Handler handler = new Handler(){@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);if (msg.what == 2001){//暂存数据arrayList = (ArrayList<Map<String, String>>) msg.obj;}}};@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = inflater.inflate(R.layout.shopping_car, null);ListView listView = view.findViewById(R.id.shopping_car_list_view);Car_ListView_Adapter car_listView_adapter = new Car_ListView_Adapter(ShoppingCar.this);listView.setAdapter(car_listView_adapter);return view;}

购物车ListView适配器

public class Car_ListView_Adapter extends BaseAdapter {ShoppingCar shoppingCar;public Car_ListView_Adapter(ShoppingCar shoppingCar) {this.shoppingCar = shoppingCar;}@Overridepublic int getCount() {return ShoppingCar.arrayList.size();}@Overridepublic Object getItem(int position) {return ShoppingCar.arrayList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder_Car viewHolder_car;if(convertView == null){viewHolder_car = new ViewHolder_Car();convertView = View.inflate(shoppingCar.getActivity(),R.layout.car_list_view,null);viewHolder_car.img = convertView.findViewById(R.id.car_list_view_img);viewHolder_car.txt1 = convertView.findViewById(R.id.car_list_view_txt1);viewHolder_car.txt2 = convertView.findViewById(R.id.car_list_view_txt2);viewHolder_car.txt3 = convertView.findViewById(R.id.car_list_view_txt3);viewHolder_car.txt4 = convertView.findViewById(R.id.car_list_view_txt4);convertView.setTag(viewHolder_car);}else {viewHolder_car = (ViewHolder_Car) convertView.getTag();}Glide.with(shoppingCar.getActivity()).load(ShoppingCar.arrayList.get(position).get("pic")).apply(RequestOptions.bitmapTransform(new CircleCrop())).into(viewHolder_car.img);viewHolder_car.txt1.setText(ShoppingCar.arrayList.get(position).get("title"));viewHolder_car.txt2.setText(ShoppingCar.arrayList.get(position).get("food_str"));viewHolder_car.txt3.setText("数量:"+ShoppingCar.arrayList.get(position).get("count"));viewHolder_car.txt4.setText(ShoppingCar.arrayList.get(position).get("large"));return convertView;}
}class ViewHolder_Car{ImageView img;TextView txt1,txt2,txt3,txt4;
}

day06ViewPager相关推荐

最新文章

  1. java怎么读取文件夹下的_java怎么读取读取文件夹下的所有文件夹和文件?
  2. linux下使用nginx搭建集群,CentOS(linux) 下Nginx的安装(Nginx+Tomcat集群第一步)
  3. 多核处理器_英特尔十代酷睿i5-10400大战R5 3600,到底谁是千元处理器一霸?
  4. struts实现文件下载
  5. C语言知识点总结2022
  6. 如何直接操作SVN将分支代码合并到主干【转载】
  7. word转HTML 基本版
  8. (重点)深入理解Java分布式架构
  9. 2021数学建模国赛b题思路总结
  10. 从阿里的产品能力模型分析,转产品如何避免“从头开始”
  11. iOS上玩galgame的各类模拟器【完整版】
  12. 第2章 应用层-计算机网络
  13. HTML+CSS零基础学习笔记(五)— 模拟淘宝首页(静态)
  14. android 更换桌面名称_更改安卓软件名称 android修改应用程序名称
  15. 店盈通: 拼多多店运营怎么选择推广关键词?
  16. [Android]gradle与Android gradle
  17. EDM邮件营销ip预热
  18. 前端开发行业现状调查
  19. 研究IdentityServer4遇到天坑signin-oidc报错
  20. 阿里云sls日志系统接入

热门文章

  1. 如何消除图片锯齿 html,Html5 canvas drawImage图片抗锯齿
  2. 净亏损大幅减少超90%,阿里影业“回归内容”的背后逻辑是什么?
  3. openlayers给要素加文字注记
  4. C语言实现通讯录(含文件保存)
  5. A7 ~ A11处理器(iphone5s~iphoneX) 14.0 ~ 14.8.1免越狱安装Trollstore教程
  6. 虚拟号码认证如何开通?
  7. 优美的曲线(含蝴蝶线)-CoCube
  8. 使用Python打印乘法口诀表
  9. Ubuntu下源码编译VirtualBox六 —— 源码编译(5)
  10. php创建多个数据表,PHP-无法在数据透视表中创建多个多对多关系