2019独角兽企业重金招聘Python工程师标准>>>

Android现在实现Tab类型的界面方式越来越多,今天就把常见的实现方式给大家来个总结。目前写了:

1、传统的ViewPager实现

2、FragmentManager+Fragment实现

3、ViewPager+FragmentPagerAdapter实现

4、TabPageIndicator+ViewPager+FragmentPagerAdapter

1、传统的ViewPager实现

主要就是ViewPager+ViewAdapter这个还是比较常见的,就不多说了

效果图:

代码:

[java] view plaincopy

  1. package com.example.mainframework02;

  2. import java.util.ArrayList;

  3. import java.util.List;

  4. import android.app.Activity;

  5. import android.os.Bundle;

  6. import android.support.v4.view.PagerAdapter;

  7. import android.support.v4.view.ViewPager;

  8. import android.support.v4.view.ViewPager.OnPageChangeListener;

  9. import android.view.LayoutInflater;

  10. import android.view.View;

  11. import android.view.ViewGroup;

  12. import android.widget.ImageButton;

  13. import android.widget.ImageView;

  14. import android.widget.LinearLayout;

  15. public class TraditionalViewPagerAcvitity extends Activity

  16. {

  17. /**

  18. * ViewPager

  19. */

  20. private ViewPager mViewPager;

  21. /**

  22. * ViewPager的适配器

  23. */

  24. private PagerAdapter mAdapter;

  25. private List<View> mViews;

  26. private LayoutInflater mInflater;

  27. private int currentIndex;

  28. /**

  29. * 底部四个按钮

  30. */

  31. private LinearLayout mTabBtnWeixin;

  32. private LinearLayout mTabBtnFrd;

  33. private LinearLayout mTabBtnAddress;

  34. private LinearLayout mTabBtnSettings;

  35. @Override

  36. protected void onCreate(Bundle savedInstanceState)

  37. {

  38. super.onCreate(savedInstanceState);

  39. setContentView(R.layout.activity_main);

  40. mInflater = LayoutInflater.from(this);

  41. mViewPager = (ViewPager) findViewById(R.id.id_viewpager);

  42. /**

  43. * 初始化View

  44. */

  45. initView();

  46. mViewPager.setAdapter(mAdapter);

  47. mViewPager.setOnPageChangeListener(new OnPageChangeListener()

  48. {

  49. @Override

  50. public void onPageSelected(int position)

  51. {

  52. resetTabBtn();

  53. switch (position)

  54. {

  55. case 0:

  56. ((ImageButton) mTabBtnWeixin.findViewById(R.id.btn_tab_bottom_weixin))

  57. .setImageResource(R.drawable.tab_weixin_pressed);

  58. break;

  59. case 1:

  60. ((ImageButton) mTabBtnFrd.findViewById(R.id.btn_tab_bottom_friend))

  61. .setImageResource(R.drawable.tab_find_frd_pressed);

  62. break;

  63. case 2:

  64. ((ImageButton) mTabBtnAddress.findViewById(R.id.btn_tab_bottom_contact))

  65. .setImageResource(R.drawable.tab_address_pressed);

  66. break;

  67. case 3:

  68. ((ImageButton) mTabBtnSettings.findViewById(R.id.btn_tab_bottom_setting))

  69. .setImageResource(R.drawable.tab_settings_pressed);

  70. break;

  71. }

  72. currentIndex = position;

  73. }

  74. @Override

  75. public void onPageScrolled(int arg0, float arg1, int arg2)

  76. {

  77. }

  78. @Override

  79. public void onPageScrollStateChanged(int arg0)

  80. {

  81. }

  82. });

  83. }

  84. protected void resetTabBtn()

  85. {

  86. ((ImageButton) mTabBtnWeixin.findViewById(R.id.btn_tab_bottom_weixin))

  87. .setImageResource(R.drawable.tab_weixin_normal);

  88. ((ImageButton) mTabBtnFrd.findViewById(R.id.btn_tab_bottom_friend))

  89. .setImageResource(R.drawable.tab_find_frd_normal);

  90. ((ImageButton) mTabBtnAddress.findViewById(R.id.btn_tab_bottom_contact))

  91. .setImageResource(R.drawable.tab_address_normal);

  92. ((ImageButton) mTabBtnSettings.findViewById(R.id.btn_tab_bottom_setting))

  93. .setImageResource(R.drawable.tab_settings_normal);

  94. }

  95. private void initView()

  96. {

  97. mTabBtnWeixin = (LinearLayout) findViewById(R.id.id_tab_bottom_weixin);

  98. mTabBtnFrd = (LinearLayout) findViewById(R.id.id_tab_bottom_friend);

  99. mTabBtnAddress = (LinearLayout) findViewById(R.id.id_tab_bottom_contact);

  100. mTabBtnSettings = (LinearLayout) findViewById(R.id.id_tab_bottom_setting);

  101. mViews = new ArrayList<View>();

  102. View first = mInflater.inflate(R.layout.main_tab_01, null);

  103. View second = mInflater.inflate(R.layout.main_tab_02, null);

  104. View third = mInflater.inflate(R.layout.main_tab_03, null);

  105. View fourth = mInflater.inflate(R.layout.main_tab_04, null);

  106. mViews.add(first);

  107. mViews.add(second);

  108. mViews.add(third);

  109. mViews.add(fourth);

  110. mAdapter = new PagerAdapter()

  111. {

  112. @Override

  113. public void destroyItem(ViewGroup container, int position, Object object)

  114. {

  115. container.removeView(mViews.get(position));

  116. }

  117. @Override

  118. public Object instantiateItem(ViewGroup container, int position)

  119. {

  120. View view = mViews.get(position);

  121. container.addView(view);

  122. return view;

  123. }

  124. @Override

  125. public boolean isViewFromObject(View arg0, Object arg1)

  126. {

  127. return arg0 == arg1;

  128. }

  129. @Override

  130. public int getCount()

  131. {

  132. return mViews.size();

  133. }

  134. };

  135. }

  136. }

评价:所有的代码都集中在一个Activity中,显得代码比较乱。

2、FragmentManager+Fragment实现

主要利用了Fragment在主内容界面对Fragment的add,hide等事务操作。

效果图:

代码:

主Activity

[java] view plaincopy

  1. package com.example.mainframework02.fragment;

  2. import android.annotation.SuppressLint;

  3. import android.app.Activity;

  4. import android.app.FragmentManager;

  5. import android.app.FragmentTransaction;

  6. import android.os.Bundle;

  7. import android.view.View;

  8. import android.view.View.OnClickListener;

  9. import android.widget.ImageButton;

  10. import android.widget.LinearLayout;

  11. import com.example.mainframework02.R;

  12. public class FragmentMainActivity extends Activity implements OnClickListener

  13. {

  14. private MainTab02 mTab02;

  15. private MainTab01 mTab01;

  16. private MainTab03 mTab03;

  17. private MainTab04 mTab04;

  18. /**

  19. * 底部四个按钮

  20. */

  21. private LinearLayout mTabBtnWeixin;

  22. private LinearLayout mTabBtnFrd;

  23. private LinearLayout mTabBtnAddress;

  24. private LinearLayout mTabBtnSettings;

  25. /**

  26. * 用于对Fragment进行管理

  27. */

  28. private FragmentManager fragmentManager;

  29. @SuppressLint("NewApi")

  30. @Override

  31. protected void onCreate(Bundle savedInstanceState)

  32. {

  33. super.onCreate(savedInstanceState);

  34. setContentView(R.layout.fragment_main);

  35. initViews();

  36. fragmentManager = getFragmentManager();

  37. setTabSelection(0);

  38. }

  39. private void initViews()

  40. {

  41. mTabBtnWeixin = (LinearLayout) findViewById(R.id.id_tab_bottom_weixin);

  42. mTabBtnFrd = (LinearLayout) findViewById(R.id.id_tab_bottom_friend);

  43. mTabBtnAddress = (LinearLayout) findViewById(R.id.id_tab_bottom_contact);

  44. mTabBtnSettings = (LinearLayout) findViewById(R.id.id_tab_bottom_setting);

  45. mTabBtnWeixin.setOnClickListener(this);

  46. mTabBtnFrd.setOnClickListener(this);

  47. mTabBtnAddress.setOnClickListener(this);

  48. mTabBtnSettings.setOnClickListener(this);

  49. }

  50. @Override

  51. public void onClick(View v)

  52. {

  53. switch (v.getId())

  54. {

  55. case R.id.id_tab_bottom_weixin:

  56. setTabSelection(0);

  57. break;

  58. case R.id.id_tab_bottom_friend:

  59. setTabSelection(1);

  60. break;

  61. case R.id.id_tab_bottom_contact:

  62. setTabSelection(2);

  63. break;

  64. case R.id.id_tab_bottom_setting:

  65. setTabSelection(3);

  66. break;

  67. default:

  68. break;

  69. }

  70. }

  71. /**

  72. * 根据传入的index参数来设置选中的tab页。

  73. *

  74. */

  75. @SuppressLint("NewApi")

  76. private void setTabSelection(int index)

  77. {

  78. // 重置按钮

  79. resetBtn();

  80. // 开启一个Fragment事务

  81. FragmentTransaction transaction = fragmentManager.beginTransaction();

  82. // 先隐藏掉所有的Fragment,以防止有多个Fragment显示在界面上的情况

  83. hideFragments(transaction);

  84. switch (index)

  85. {

  86. case 0:

  87. // 当点击了消息tab时,改变控件的图片和文字颜色

  88. ((ImageButton) mTabBtnWeixin.findViewById(R.id.btn_tab_bottom_weixin))

  89. .setImageResource(R.drawable.tab_weixin_pressed);

  90. if (mTab01 == null)

  91. {

  92. // 如果MessageFragment为空,则创建一个并添加到界面上

  93. mTab01 = new MainTab01();

  94. transaction.add(R.id.id_content, mTab01);

  95. } else

  96. {

  97. // 如果MessageFragment不为空,则直接将它显示出来

  98. transaction.show(mTab01);

  99. }

  100. break;

  101. case 1:

  102. // 当点击了消息tab时,改变控件的图片和文字颜色

  103. ((ImageButton) mTabBtnFrd.findViewById(R.id.btn_tab_bottom_friend))

  104. .setImageResource(R.drawable.tab_find_frd_pressed);

  105. if (mTab02 == null)

  106. {

  107. // 如果MessageFragment为空,则创建一个并添加到界面上

  108. mTab02 = new MainTab02();

  109. transaction.add(R.id.id_content, mTab02);

  110. } else

  111. {

  112. // 如果MessageFragment不为空,则直接将它显示出来

  113. transaction.show(mTab02);

  114. }

  115. break;

  116. case 2:

  117. // 当点击了动态tab时,改变控件的图片和文字颜色

  118. ((ImageButton) mTabBtnAddress.findViewById(R.id.btn_tab_bottom_contact))

  119. .setImageResource(R.drawable.tab_address_pressed);

  120. if (mTab03 == null)

  121. {

  122. // 如果NewsFragment为空,则创建一个并添加到界面上

  123. mTab03 = new MainTab03();

  124. transaction.add(R.id.id_content, mTab03);

  125. } else

  126. {

  127. // 如果NewsFragment不为空,则直接将它显示出来

  128. transaction.show(mTab03);

  129. }

  130. break;

  131. case 3:

  132. // 当点击了设置tab时,改变控件的图片和文字颜色

  133. ((ImageButton) mTabBtnSettings.findViewById(R.id.btn_tab_bottom_setting))

  134. .setImageResource(R.drawable.tab_settings_pressed);

  135. if (mTab04 == null)

  136. {

  137. // 如果SettingFragment为空,则创建一个并添加到界面上

  138. mTab04 = new MainTab04();

  139. transaction.add(R.id.id_content, mTab04);

  140. } else

  141. {

  142. // 如果SettingFragment不为空,则直接将它显示出来

  143. transaction.show(mTab04);

  144. }

  145. break;

  146. }

  147. transaction.commit();

  148. }

  149. /**

  150. * 清除掉所有的选中状态。

  151. */

  152. private void resetBtn()

  153. {

  154. ((ImageButton) mTabBtnWeixin.findViewById(R.id.btn_tab_bottom_weixin))

  155. .setImageResource(R.drawable.tab_weixin_normal);

  156. ((ImageButton) mTabBtnFrd.findViewById(R.id.btn_tab_bottom_friend))

  157. .setImageResource(R.drawable.tab_find_frd_normal);

  158. ((ImageButton) mTabBtnAddress.findViewById(R.id.btn_tab_bottom_contact))

  159. .setImageResource(R.drawable.tab_address_normal);

  160. ((ImageButton) mTabBtnSettings.findViewById(R.id.btn_tab_bottom_setting))

  161. .setImageResource(R.drawable.tab_settings_normal);

  162. }

  163. /**

  164. * 将所有的Fragment都置为隐藏状态。

  165. *

  166. * @param transaction

  167. *            用于对Fragment执行操作的事务

  168. */

  169. @SuppressLint("NewApi")

  170. private void hideFragments(FragmentTransaction transaction)

  171. {

  172. if (mTab01 != null)

  173. {

  174. transaction.hide(mTab01);

  175. }

  176. if (mTab02 != null)

  177. {

  178. transaction.hide(mTab02);

  179. }

  180. if (mTab03 != null)

  181. {

  182. transaction.hide(mTab03);

  183. }

  184. if (mTab04 != null)

  185. {

  186. transaction.hide(mTab04);

  187. }

  188. }

  189. }

各个TabFragment,一共四个TabFragment,下面贴出两个,基本都一样。

[java] view plaincopy

  1. package com.example.mainframework02.fragment;

  2. import android.annotation.SuppressLint;

  3. import android.app.Fragment;

  4. import android.os.Bundle;

  5. import android.view.LayoutInflater;

  6. import android.view.View;

  7. import android.view.ViewGroup;

  8. @SuppressLint("NewApi")

  9. public class MainTab01 extends Fragment

  10. {

  11. @Override

  12. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)

  13. {

  14. return inflater.inflate(com.example.mainframework02.R.layout.main_tab_01, container, false);

  15. }

  16. }

[java] view plaincopy

  1. package com.example.mainframework02.fragment;

  2. import android.annotation.SuppressLint;

  3. import android.app.Fragment;

  4. import android.os.Bundle;

  5. import android.view.LayoutInflater;

  6. import android.view.View;

  7. import android.view.ViewGroup;

  8. import com.example.mainframework02.R;

  9. @SuppressLint("NewApi")

  10. public class MainTab02 extends Fragment

  11. {

  12. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)

  13. {

  14. return inflater.inflate(R.layout.main_tab_02, container, false);

  15. }

  16. }

评价:每个Fragment中的控件的处理,都是独立到各自的类中,相对来说主Activity简化了不少,可惜没有左右滑动的效果了。

3、ViewPager+Fragment实现

主要通过ViewPager和FragmentPagerAdapter一起来实现。

效果图:

代码:

主Activity

[java] view plaincopy

  1. package com.example.mainframework03;

  2. import java.util.ArrayList;

  3. import java.util.List;

  4. import android.os.Bundle;

  5. import android.support.v4.app.Fragment;

  6. import android.support.v4.app.FragmentActivity;

  7. import android.support.v4.app.FragmentPagerAdapter;

  8. import android.support.v4.view.ViewPager;

  9. import android.support.v4.view.ViewPager.OnPageChangeListener;

  10. import android.widget.ImageButton;

  11. import android.widget.LinearLayout;

  12. public class MainActivity extends FragmentActivity

  13. {

  14. private ViewPager mViewPager;

  15. private FragmentPagerAdapter mAdapter;

  16. private List<Fragment> mFragments = new ArrayList<Fragment>();

  17. /**

  18. * 底部四个按钮

  19. */

  20. private LinearLayout mTabBtnWeixin;

  21. private LinearLayout mTabBtnFrd;

  22. private LinearLayout mTabBtnAddress;

  23. private LinearLayout mTabBtnSettings;

  24. @Override

  25. protected void onCreate(Bundle savedInstanceState)

  26. {

  27. super.onCreate(savedInstanceState);

  28. setContentView(R.layout.activity_main);

  29. mViewPager = (ViewPager) findViewById(R.id.id_viewpager);

  30. initView();

  31. mAdapter = new FragmentPagerAdapter(getSupportFragmentManager())

  32. {

  33. @Override

  34. public int getCount()

  35. {

  36. return mFragments.size();

  37. }

  38. @Override

  39. public Fragment getItem(int arg0)

  40. {

  41. return mFragments.get(arg0);

  42. }

  43. };

  44. mViewPager.setAdapter(mAdapter);

  45. mViewPager.setOnPageChangeListener(new OnPageChangeListener()

  46. {

  47. private int currentIndex;

  48. @Override

  49. public void onPageSelected(int position)

  50. {

  51. resetTabBtn();

  52. switch (position)

  53. {

  54. case 0:

  55. ((ImageButton) mTabBtnWeixin.findViewById(R.id.btn_tab_bottom_weixin))

  56. .setImageResource(R.drawable.tab_weixin_pressed);

  57. break;

  58. case 1:

  59. ((ImageButton) mTabBtnFrd.findViewById(R.id.btn_tab_bottom_friend))

  60. .setImageResource(R.drawable.tab_find_frd_pressed);

  61. break;

  62. case 2:

  63. ((ImageButton) mTabBtnAddress.findViewById(R.id.btn_tab_bottom_contact))

  64. .setImageResource(R.drawable.tab_address_pressed);

  65. break;

  66. case 3:

  67. ((ImageButton) mTabBtnSettings.findViewById(R.id.btn_tab_bottom_setting))

  68. .setImageResource(R.drawable.tab_settings_pressed);

  69. break;

  70. }

  71. currentIndex = position;

  72. }

  73. @Override

  74. public void onPageScrolled(int arg0, float arg1, int arg2)

  75. {

  76. }

  77. @Override

  78. public void onPageScrollStateChanged(int arg0)

  79. {

  80. }

  81. });

  82. }

  83. protected void resetTabBtn()

  84. {

  85. ((ImageButton) mTabBtnWeixin.findViewById(R.id.btn_tab_bottom_weixin))

  86. .setImageResource(R.drawable.tab_weixin_normal);

  87. ((ImageButton) mTabBtnFrd.findViewById(R.id.btn_tab_bottom_friend))

  88. .setImageResource(R.drawable.tab_find_frd_normal);

  89. ((ImageButton) mTabBtnAddress.findViewById(R.id.btn_tab_bottom_contact))

  90. .setImageResource(R.drawable.tab_address_normal);

  91. ((ImageButton) mTabBtnSettings.findViewById(R.id.btn_tab_bottom_setting))

  92. .setImageResource(R.drawable.tab_settings_normal);

  93. }

  94. private void initView()

  95. {

  96. mTabBtnWeixin = (LinearLayout) findViewById(R.id.id_tab_bottom_weixin);

  97. mTabBtnFrd = (LinearLayout) findViewById(R.id.id_tab_bottom_friend);

  98. mTabBtnAddress = (LinearLayout) findViewById(R.id.id_tab_bottom_contact);

  99. mTabBtnSettings = (LinearLayout) findViewById(R.id.id_tab_bottom_setting);

  100. MainTab01 tab01 = new MainTab01();

  101. MainTab02 tab02 = new MainTab02();

  102. MainTab03 tab03 = new MainTab03();

  103. MainTab04 tab04 = new MainTab04();

  104. mFragments.add(tab01);

  105. mFragments.add(tab02);

  106. mFragments.add(tab03);

  107. mFragments.add(tab04);

  108. }

  109. }

还有4个TabFragment,下面贴一个,四个基本一样

[java] view plaincopy

  1. package com.example.mainframework03;

  2. import android.os.Bundle;

  3. import android.support.v4.app.Fragment;

  4. import android.view.LayoutInflater;

  5. import android.view.View;

  6. import android.view.ViewGroup;

  7. public class MainTab01 extends Fragment

  8. {

  9. @Override

  10. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)

  11. {

  12. return  inflater.inflate(R.layout.main_tab_01, container, false);

  13. }

  14. }

评价:实现效果和第一种效果一模一样,每个Fragment独自处理自己内部的逻辑,代码整洁很多,并且支持左右滑动。感觉是第一种和第二种的结合版本。

4、TabPageIndicator+ViewPager+FragmentPagerAdapter

实现方式和3是一致的,但是使用了TabPageIndicator作为tab的指示器,效果还是不错的,这个之前写过,就不再贴代码了。

效果图:

参考:Android 使用Fragment,ViewPagerIndicator 制作csdn app主要框架

好了,就总结了这么多,肯定还有很多别的实现方式,大家可以留言,有时间会继续完善这篇总结的。

第一种和第二种的源码

第三种方式的源码

转载于:https://my.oschina.net/u/941420/blog/375612

Android项目Tab类型主界面大总结相关推荐

  1. Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24740977 Android如今实现Tab类型的界面方式越来越多,今天就把常见的 ...

  2. Unity 3D项目 - 01 - 开始游戏主界面

    Unity 3D项目 - 01 - 开始游戏主界面 一.常用代码 0.打印调试 Debug.Log():将消息记录到 Unity 控制台.<Debug-Log - Unity 脚本 API> ...

  3. 如何让fragment刷新界面_快速实现android版抖音主界面的心得

    原文作者:DK_BurNIng 如何快速确定竞品某个界面的实现方式? 当你收到产品一个需求是模仿某个竞品且时间很短没有过多时间给你调研技术方案的时候,如何尽快确定这个功能的技术方案呢? 这里我给出我自 ...

  4. (仿头条APP项目)2.主界面按钮切换Fragment页面

    文章目录 主界面按钮切换Fragment页面 效果展示 框架结构 xml视图 主视图 选择器和style java代码模块 创建4个Fragment 1.绑定按钮选择事件 2.初始化和用HashMap ...

  5. android项目中刷新activity界面

    android项目中在sqlite数据库插入/更新/删除数据后: 1. 刷新当前activity界面数据(手动刷新): 在activity类下新增一个refresh()方法: /*** 刷新, 这样的 ...

  6. 云炬Android开发笔记 9主界面-通用底部导航设计与一键式封装

    阅读目录 1.底部导航BottomBar设计与实现 1.1 说明 1.2 基于每个tab的子frament的父类的实现 1.3  建立bean类包含tab的信息(icon+文字) 2.打造适合电商主界 ...

  7. android ApiDemos学习1 主界面动态ListView显示

    0 Android提供了一个供开发者学习使用的示例程序.其界面如下.图中可以看到,应用列表应为ListView,看其源码发现,并非为简单的ListView,而是采用动态加载的方式. 1 主界面代码如下 ...

  8. QQ实训项目(登录 注册 主界面 消息列表 资料卡)

    界面 废话不多说,直接上界面 注册功能 如下:用户名存入数据库  界面检验密码是否符合规范 2:密码规范存入数据库并且加密(数据库的文件可以找我拷贝)加密是MD5加密单向加密 3:输入手机号码点击获取 ...

  9. android 开发性格测试软件,性格色彩测试android程序开发之一--主界面

    思路:主界面只有一张背景图片,两个按钮,当按钮按下的时候,按钮的颜色会发生相应的变化,按下的分成了三个状态,default,pressed和selected. 在Activity中,对button进行 ...

  10. android app 主界面,android ViewPager实现App主界面Tab菜单页面切换和点击事件

    Tabhost实现页面滑动切换比较麻烦,这里介绍一下viewPage 控件. 实现了三屏滑动带标题点击和tab页面内按钮的的点击事件实现: viewPage  的优点是可以滑动切换缺点是MainAct ...

最新文章

  1. Windows Server 2012 R2 WSUS-11:经典的客户端排错操作
  2. effective mysql之备份与恢复_Effective MySQL之备份与恢复
  3. php tp 模板assign,thinkphp中怎么让assign在另一个模板里使用呢?
  4. linux 编译环境包,linux上war包编译环境搭建
  5. You can format your XML in the 'standard' Android way...
  6. NC文件数据提取完成(1.16)
  7. 20210107WEB渗透学习之信息收集
  8. 常用概率分布及其数学期望和方差
  9. 传奇程序员云风:从创业到被招安,细数我这20年程序人生
  10. matlab 对数回归,matlab的对数回归
  11. 手把手教你安装虚拟机16
  12. 程序员所使用的各种软件分享及破解
  13. 2020年茶艺师(初级)复审考试及茶艺师(初级)模拟试题
  14. picker多选 vant_浅谈vant组件Picker 选择器选单选问题
  15. Windows 10 已禁用输入法
  16. C语言编程从键盘输入n
  17. USTC English Club Note20211227
  18. 整理:学术论文发表过程中的审稿人意见答复技巧
  19. 城市选择插件 V-Distpicker 组件详解以及全套用法
  20. ajax complete写法,JQuery ajaxComplete()用法及代码示例

热门文章

  1. JQuery EasyUI 之 messager基本使用
  2. python学习笔记 day42 对数据表的操作---增删改查
  3. hdu 5919 主席树保留区间数的种类数目
  4. (转)windows 下 Java 及 Python 环境变量设置
  5. 高级javascript---严格模式
  6. CentOS - 安装mysql
  7. 世界大了,啥子都有,全球最大中文搜"人"引擎
  8. Centos7+LVS-DR+Apache负载均衡web实验
  9. Vue.js起手式+Vue小作品实战
  10. python之路 jQuery学习笔记