转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24740977

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

1、传统的ViewPager实现

2、FragmentManager+Fragment实现

3、ViewPager+FragmentPagerAdapter实现

4、TabPageIndicator+ViewPager+FragmentPagerAdapter

1、传统的ViewPager实现

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

效果图:

代码:

  1. package com.example.mainframework02;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import android.app.Activity;
  7. import android.os.Bundle;
  8. import android.support.v4.view.PagerAdapter;
  9. import android.support.v4.view.ViewPager;
  10. import android.support.v4.view.ViewPager.OnPageChangeListener;
  11. import android.view.LayoutInflater;
  12. import android.view.View;
  13. import android.view.ViewGroup;
  14. import android.widget.ImageButton;
  15. import android.widget.ImageView;
  16. import android.widget.LinearLayout;
  17.  
  18. public class TraditionalViewPagerAcvitity extends Activity
  19. {
  20.  
  21. /**
  22. * ViewPager
  23. */
  24. private ViewPager mViewPager;
  25. /**
  26. * ViewPager的适配器
  27. */
  28. private PagerAdapter mAdapter;
  29. private List<View> mViews;
  30. private LayoutInflater mInflater;
  31.  
  32. private int currentIndex;
  33.  
  34. /**
  35. * 底部四个button
  36. */
  37. private LinearLayout mTabBtnWeixin;
  38. private LinearLayout mTabBtnFrd;
  39. private LinearLayout mTabBtnAddress;
  40. private LinearLayout mTabBtnSettings;
  41.  
  42. @Override
  43. protected void onCreate(Bundle savedInstanceState)
  44. {
  45. super.onCreate(savedInstanceState);
  46. setContentView(R.layout.activity_main);
  47. mInflater = LayoutInflater.from(this);
  48. mViewPager = (ViewPager) findViewById(R.id.id_viewpager);
  49.  
  50. /**
  51. * 初始化View
  52. */
  53. initView();
  54.  
  55. mViewPager.setAdapter(mAdapter);
  56.  
  57. mViewPager.setOnPageChangeListener(new OnPageChangeListener()
  58. {
  59.  
  60. @Override
  61. public void onPageSelected(int position)
  62. {
  63. resetTabBtn();
  64. switch (position)
  65. {
  66. case 0:
  67. ((ImageButton) mTabBtnWeixin.findViewById(R.id.btn_tab_bottom_weixin))
  68. .setImageResource(R.drawable.tab_weixin_pressed);
  69. break;
  70. case 1:
  71. ((ImageButton) mTabBtnFrd.findViewById(R.id.btn_tab_bottom_friend))
  72. .setImageResource(R.drawable.tab_find_frd_pressed);
  73. break;
  74. case 2:
  75. ((ImageButton) mTabBtnAddress.findViewById(R.id.btn_tab_bottom_contact))
  76. .setImageResource(R.drawable.tab_address_pressed);
  77. break;
  78. case 3:
  79. ((ImageButton) mTabBtnSettings.findViewById(R.id.btn_tab_bottom_setting))
  80. .setImageResource(R.drawable.tab_settings_pressed);
  81. break;
  82. }
  83.  
  84. currentIndex = position;
  85. }
  86.  
  87. @Override
  88. public void onPageScrolled(int arg0, float arg1, int arg2)
  89. {
  90.  
  91. }
  92.  
  93. @Override
  94. public void onPageScrollStateChanged(int arg0)
  95. {
  96. }
  97. });
  98.  
  99. }
  100.  
  101. protected void resetTabBtn()
  102. {
  103. ((ImageButton) mTabBtnWeixin.findViewById(R.id.btn_tab_bottom_weixin))
  104. .setImageResource(R.drawable.tab_weixin_normal);
  105. ((ImageButton) mTabBtnFrd.findViewById(R.id.btn_tab_bottom_friend))
  106. .setImageResource(R.drawable.tab_find_frd_normal);
  107. ((ImageButton) mTabBtnAddress.findViewById(R.id.btn_tab_bottom_contact))
  108. .setImageResource(R.drawable.tab_address_normal);
  109. ((ImageButton) mTabBtnSettings.findViewById(R.id.btn_tab_bottom_setting))
  110. .setImageResource(R.drawable.tab_settings_normal);
  111. }
  112.  
  113. private void initView()
  114. {
  115.  
  116. mTabBtnWeixin = (LinearLayout) findViewById(R.id.id_tab_bottom_weixin);
  117. mTabBtnFrd = (LinearLayout) findViewById(R.id.id_tab_bottom_friend);
  118. mTabBtnAddress = (LinearLayout) findViewById(R.id.id_tab_bottom_contact);
  119. mTabBtnSettings = (LinearLayout) findViewById(R.id.id_tab_bottom_setting);
  120.  
  121. mViews = new ArrayList<View>();
  122. View first = mInflater.inflate(R.layout.main_tab_01, null);
  123. View second = mInflater.inflate(R.layout.main_tab_02, null);
  124. View third = mInflater.inflate(R.layout.main_tab_03, null);
  125. View fourth = mInflater.inflate(R.layout.main_tab_04, null);
  126. mViews.add(first);
  127. mViews.add(second);
  128. mViews.add(third);
  129. mViews.add(fourth);
  130.  
  131. mAdapter = new PagerAdapter()
  132. {
  133. @Override
  134. public void destroyItem(ViewGroup container, int position, Object object)
  135. {
  136. container.removeView(mViews.get(position));
  137. }
  138.  
  139. @Override
  140. public Object instantiateItem(ViewGroup container, int position)
  141. {
  142. View view = mViews.get(position);
  143. container.addView(view);
  144. return view;
  145. }
  146.  
  147. @Override
  148. public boolean isViewFromObject(View arg0, Object arg1)
  149. {
  150. return arg0 == arg1;
  151. }
  152.  
  153. @Override
  154. public int getCount()
  155. {
  156. return mViews.size();
  157. }
  158. };
  159. }
  160.  
  161. }

评价:全部的代码都集中在一个Activity中,显得代码比較乱。

2、FragmentManager+Fragment实现

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

效果图:

代码:

主Activity

  1. package com.example.mainframework02.fragment;
  2.  
  3. import android.annotation.SuppressLint;
  4. import android.app.Activity;
  5. import android.app.FragmentManager;
  6. import android.app.FragmentTransaction;
  7. import android.os.Bundle;
  8. import android.view.View;
  9. import android.view.View.OnClickListener;
  10. import android.widget.ImageButton;
  11. import android.widget.LinearLayout;
  12.  
  13. import com.example.mainframework02.R;
  14.  
  15. public class FragmentMainActivity extends Activity implements OnClickListener
  16. {
  17. private MainTab02 mTab02;
  18. private MainTab01 mTab01;
  19. private MainTab03 mTab03;
  20. private MainTab04 mTab04;
  21.  
  22. /**
  23. * 底部四个button
  24. */
  25. private LinearLayout mTabBtnWeixin;
  26. private LinearLayout mTabBtnFrd;
  27. private LinearLayout mTabBtnAddress;
  28. private LinearLayout mTabBtnSettings;
  29. /**
  30. * 用于对Fragment进行管理
  31. */
  32. private FragmentManager fragmentManager;
  33.  
  34. @SuppressLint("NewApi")
  35. @Override
  36. protected void onCreate(Bundle savedInstanceState)
  37. {
  38. super.onCreate(savedInstanceState);
  39. setContentView(R.layout.fragment_main);
  40. initViews();
  41. fragmentManager = getFragmentManager();
  42. setTabSelection(0);
  43. }
  44.  
  45. private void initViews()
  46. {
  47.  
  48. mTabBtnWeixin = (LinearLayout) findViewById(R.id.id_tab_bottom_weixin);
  49. mTabBtnFrd = (LinearLayout) findViewById(R.id.id_tab_bottom_friend);
  50. mTabBtnAddress = (LinearLayout) findViewById(R.id.id_tab_bottom_contact);
  51. mTabBtnSettings = (LinearLayout) findViewById(R.id.id_tab_bottom_setting);
  52.  
  53. mTabBtnWeixin.setOnClickListener(this);
  54. mTabBtnFrd.setOnClickListener(this);
  55. mTabBtnAddress.setOnClickListener(this);
  56. mTabBtnSettings.setOnClickListener(this);
  57. }
  58.  
  59. @Override
  60. public void onClick(View v)
  61. {
  62. switch (v.getId())
  63. {
  64. case R.id.id_tab_bottom_weixin:
  65. setTabSelection(0);
  66. break;
  67. case R.id.id_tab_bottom_friend:
  68. setTabSelection(1);
  69. break;
  70. case R.id.id_tab_bottom_contact:
  71. setTabSelection(2);
  72. break;
  73. case R.id.id_tab_bottom_setting:
  74. setTabSelection(3);
  75. break;
  76.  
  77. default:
  78. break;
  79. }
  80. }
  81.  
  82. /**
  83. * 依据传入的index參数来设置选中的tab页。
  84.  
  85. *
  86. */
  87. @SuppressLint("NewApi")
  88. private void setTabSelection(int index)
  89. {
  90. // 重置button
  91. resetBtn();
  92. // 开启一个Fragment事务
  93. FragmentTransaction transaction = fragmentManager.beginTransaction();
  94. // 先隐藏掉全部的Fragment,以防止有多个Fragment显示在界面上的情况
  95. hideFragments(transaction);
  96. switch (index)
  97. {
  98. case 0:
  99. // 当点击了消息tab时,改变控件的图片和文字颜色
  100. ((ImageButton) mTabBtnWeixin.findViewById(R.id.btn_tab_bottom_weixin))
  101. .setImageResource(R.drawable.tab_weixin_pressed);
  102. if (mTab01 == null)
  103. {
  104. // 假设MessageFragment为空,则创建一个并加入到界面上
  105. mTab01 = new MainTab01();
  106. transaction.add(R.id.id_content, mTab01);
  107. } else
  108. {
  109. // 假设MessageFragment不为空,则直接将它显示出来
  110. transaction.show(mTab01);
  111. }
  112. break;
  113. case 1:
  114. // 当点击了消息tab时,改变控件的图片和文字颜色
  115. ((ImageButton) mTabBtnFrd.findViewById(R.id.btn_tab_bottom_friend))
  116. .setImageResource(R.drawable.tab_find_frd_pressed);
  117. if (mTab02 == null)
  118. {
  119. // 假设MessageFragment为空,则创建一个并加入到界面上
  120. mTab02 = new MainTab02();
  121. transaction.add(R.id.id_content, mTab02);
  122. } else
  123. {
  124. // 假设MessageFragment不为空,则直接将它显示出来
  125. transaction.show(mTab02);
  126. }
  127. break;
  128. case 2:
  129. // 当点击了动态tab时,改变控件的图片和文字颜色
  130. ((ImageButton) mTabBtnAddress.findViewById(R.id.btn_tab_bottom_contact))
  131. .setImageResource(R.drawable.tab_address_pressed);
  132. if (mTab03 == null)
  133. {
  134. // 假设NewsFragment为空,则创建一个并加入到界面上
  135. mTab03 = new MainTab03();
  136. transaction.add(R.id.id_content, mTab03);
  137. } else
  138. {
  139. // 假设NewsFragment不为空。则直接将它显示出来
  140. transaction.show(mTab03);
  141. }
  142. break;
  143. case 3:
  144. // 当点击了设置tab时,改变控件的图片和文字颜色
  145. ((ImageButton) mTabBtnSettings.findViewById(R.id.btn_tab_bottom_setting))
  146. .setImageResource(R.drawable.tab_settings_pressed);
  147. if (mTab04 == null)
  148. {
  149. // 假设SettingFragment为空,则创建一个并加入到界面上
  150. mTab04 = new MainTab04();
  151. transaction.add(R.id.id_content, mTab04);
  152. } else
  153. {
  154. // 假设SettingFragment不为空,则直接将它显示出来
  155. transaction.show(mTab04);
  156. }
  157. break;
  158. }
  159. transaction.commit();
  160. }
  161.  
  162. /**
  163. * 清除掉全部的选中状态。
  164. */
  165. private void resetBtn()
  166. {
  167. ((ImageButton) mTabBtnWeixin.findViewById(R.id.btn_tab_bottom_weixin))
  168. .setImageResource(R.drawable.tab_weixin_normal);
  169. ((ImageButton) mTabBtnFrd.findViewById(R.id.btn_tab_bottom_friend))
  170. .setImageResource(R.drawable.tab_find_frd_normal);
  171. ((ImageButton) mTabBtnAddress.findViewById(R.id.btn_tab_bottom_contact))
  172. .setImageResource(R.drawable.tab_address_normal);
  173. ((ImageButton) mTabBtnSettings.findViewById(R.id.btn_tab_bottom_setting))
  174. .setImageResource(R.drawable.tab_settings_normal);
  175. }
  176.  
  177. /**
  178. * 将全部的Fragment都置为隐藏状态。
  179. *
  180. * @param transaction
  181. * 用于对Fragment运行操作的事务
  182. */
  183. @SuppressLint("NewApi")
  184. private void hideFragments(FragmentTransaction transaction)
  185. {
  186. if (mTab01 != null)
  187. {
  188. transaction.hide(mTab01);
  189. }
  190. if (mTab02 != null)
  191. {
  192. transaction.hide(mTab02);
  193. }
  194. if (mTab03 != null)
  195. {
  196. transaction.hide(mTab03);
  197. }
  198. if (mTab04 != null)
  199. {
  200. transaction.hide(mTab04);
  201. }
  202.  
  203. }
  204.  
  205. }

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

  1. package com.example.mainframework02.fragment;
  2.  
  3. import android.annotation.SuppressLint;
  4. import android.app.Fragment;
  5. import android.os.Bundle;
  6. import android.view.LayoutInflater;
  7. import android.view.View;
  8. import android.view.ViewGroup;
  9.  
  10. @SuppressLint("NewApi")
  11. public class MainTab01 extends Fragment
  12. {
  13.  
  14. @Override
  15. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
  16. {
  17. return inflater.inflate(com.example.mainframework02.R.layout.main_tab_01, container, false);
  18.  
  19. }
  20.  
  21. }

  1. package com.example.mainframework02.fragment;
  2.  
  3. import android.annotation.SuppressLint;
  4. import android.app.Fragment;
  5. import android.os.Bundle;
  6. import android.view.LayoutInflater;
  7. import android.view.View;
  8. import android.view.ViewGroup;
  9.  
  10. import com.example.mainframework02.R;
  11.  
  12. @SuppressLint("NewApi")
  13. public class MainTab02 extends Fragment
  14. {
  15.  
  16. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
  17. {
  18. return inflater.inflate(R.layout.main_tab_02, container, false);
  19.  
  20. }
  21.  
  22. }

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

3、ViewPager+Fragment实现

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

效果图:

代码:

主Activity

  1. package com.example.mainframework03;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.List;
  5.  
  6. import android.os.Bundle;
  7. import android.support.v4.app.Fragment;
  8. import android.support.v4.app.FragmentActivity;
  9. import android.support.v4.app.FragmentPagerAdapter;
  10. import android.support.v4.view.ViewPager;
  11. import android.support.v4.view.ViewPager.OnPageChangeListener;
  12. import android.widget.ImageButton;
  13. import android.widget.LinearLayout;
  14.  
  15. public class MainActivity extends FragmentActivity
  16. {
  17.  
  18. private ViewPager mViewPager;
  19. private FragmentPagerAdapter mAdapter;
  20. private List<Fragment> mFragments = new ArrayList<Fragment>();
  21.  
  22. /**
  23. * 底部四个button
  24. */
  25. private LinearLayout mTabBtnWeixin;
  26. private LinearLayout mTabBtnFrd;
  27. private LinearLayout mTabBtnAddress;
  28. private LinearLayout mTabBtnSettings;
  29.  
  30. @Override
  31. protected void onCreate(Bundle savedInstanceState)
  32. {
  33. super.onCreate(savedInstanceState);
  34. setContentView(R.layout.activity_main);
  35. mViewPager = (ViewPager) findViewById(R.id.id_viewpager);
  36.  
  37. initView();
  38.  
  39. mAdapter = new FragmentPagerAdapter(getSupportFragmentManager())
  40. {
  41.  
  42. @Override
  43. public int getCount()
  44. {
  45. return mFragments.size();
  46. }
  47.  
  48. @Override
  49. public Fragment getItem(int arg0)
  50. {
  51. return mFragments.get(arg0);
  52. }
  53. };
  54.  
  55. mViewPager.setAdapter(mAdapter);
  56.  
  57. mViewPager.setOnPageChangeListener(new OnPageChangeListener()
  58. {
  59.  
  60. private int currentIndex;
  61.  
  62. @Override
  63. public void onPageSelected(int position)
  64. {
  65. resetTabBtn();
  66. switch (position)
  67. {
  68. case 0:
  69. ((ImageButton) mTabBtnWeixin.findViewById(R.id.btn_tab_bottom_weixin))
  70. .setImageResource(R.drawable.tab_weixin_pressed);
  71. break;
  72. case 1:
  73. ((ImageButton) mTabBtnFrd.findViewById(R.id.btn_tab_bottom_friend))
  74. .setImageResource(R.drawable.tab_find_frd_pressed);
  75. break;
  76. case 2:
  77. ((ImageButton) mTabBtnAddress.findViewById(R.id.btn_tab_bottom_contact))
  78. .setImageResource(R.drawable.tab_address_pressed);
  79. break;
  80. case 3:
  81. ((ImageButton) mTabBtnSettings.findViewById(R.id.btn_tab_bottom_setting))
  82. .setImageResource(R.drawable.tab_settings_pressed);
  83. break;
  84. }
  85.  
  86. currentIndex = position;
  87. }
  88.  
  89. @Override
  90. public void onPageScrolled(int arg0, float arg1, int arg2)
  91. {
  92.  
  93. }
  94.  
  95. @Override
  96. public void onPageScrollStateChanged(int arg0)
  97. {
  98. }
  99. });
  100.  
  101. }
  102.  
  103. protected void resetTabBtn()
  104. {
  105. ((ImageButton) mTabBtnWeixin.findViewById(R.id.btn_tab_bottom_weixin))
  106. .setImageResource(R.drawable.tab_weixin_normal);
  107. ((ImageButton) mTabBtnFrd.findViewById(R.id.btn_tab_bottom_friend))
  108. .setImageResource(R.drawable.tab_find_frd_normal);
  109. ((ImageButton) mTabBtnAddress.findViewById(R.id.btn_tab_bottom_contact))
  110. .setImageResource(R.drawable.tab_address_normal);
  111. ((ImageButton) mTabBtnSettings.findViewById(R.id.btn_tab_bottom_setting))
  112. .setImageResource(R.drawable.tab_settings_normal);
  113. }
  114.  
  115. private void initView()
  116. {
  117.  
  118. mTabBtnWeixin = (LinearLayout) findViewById(R.id.id_tab_bottom_weixin);
  119. mTabBtnFrd = (LinearLayout) findViewById(R.id.id_tab_bottom_friend);
  120. mTabBtnAddress = (LinearLayout) findViewById(R.id.id_tab_bottom_contact);
  121. mTabBtnSettings = (LinearLayout) findViewById(R.id.id_tab_bottom_setting);
  122.  
  123. MainTab01 tab01 = new MainTab01();
  124. MainTab02 tab02 = new MainTab02();
  125. MainTab03 tab03 = new MainTab03();
  126. MainTab04 tab04 = new MainTab04();
  127. mFragments.add(tab01);
  128. mFragments.add(tab02);
  129. mFragments.add(tab03);
  130. mFragments.add(tab04);
  131. }
  132. }

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

  1. package com.example.mainframework03;
  2.  
  3. import android.os.Bundle;
  4. import android.support.v4.app.Fragment;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.ViewGroup;
  8.  
  9. public class MainTab01 extends Fragment
  10. {
  11.  
  12. @Override
  13. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
  14. {
  15. return inflater.inflate(R.layout.main_tab_01, container, false);
  16.  
  17. }
  18.  
  19. }

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

4、TabPageIndicator+ViewPager+FragmentPagerAdapter

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

效果图:

參考:Android 使用Fragment。ViewPagerIndicator 制作csdn app主要框架

好了。就总结了这么多。肯定还有非常多别的实现方式。大家能够留言,有时间会继续完好这篇总结的。

第一种和另外一种的源代码

第三种方式的源代码

本来想一起。无奈,一会v4.Fragment一会Fragment就分开了,嘿嘿,各位留个言,赞一个。算是对我的支持。
该博客视频教程已经更新:多种多样的App主界面Tab实现方法 ,期待您的关注。
----------------------------------------------------------------------------------------------------------

博主部分视频已经上线,假设你不喜欢枯燥的文本。请猛戳(初录,期待您的支持):

视频文件夹地址:本人录制的视频教程

Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager的更多相关文章

  1. Android Tab类型主界面 Fragment+TabPageIndicator+ViewPager

    文章地址: Android项目Tab类型主界面大总结 Fragment+TabPageIndicator+ViewPager 1.使用ViewPager + PagerAdapter 每个页面的内容都 ...

  2. android Tab 类型切换界面

    实现方案:viewpager + fragment + FragmentPagerAdapter 效果图: 可以左右滑动切换选项卡,或者点击: 如果想使用fragment的时候又想可以左右滑动,就可以 ...

  3. (转)Android项目重构之路:界面篇

    在前一篇文章<Android项目重构之路:架构篇>中已经简单说明了项目的架构,将项目分为了四个层级:模型层.接口层.核心层.界面层.其中,最上层的界面,是变化最频繁的一个层面,也是最复杂最 ...

  4. 安卓开发_慕课网_Fragment实现Tab(App主界面)

    学习内容来自“慕课网” 这里用Fragment来实现APP主界面 思路: 底部横向排列4个LinearLayout,每个LinearLayout包含一个图片按钮和一个文字 1.默认显示第一个功能(微信 ...

  5. 安卓开发_慕课网_ViewPager实现Tab(App主界面)

    学习内容来自“慕课网” 网站上一共有4种方法来实现APP主界面的TAB方法 这里学习第一种 ViewPager实现Tab 布局文件有7个, 主界面acitivity.layout <Linear ...

  6. android项目中刷新activity界面

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

  7. 安卓开发_慕课网_ViewPager与FragmentPagerAdapter实现Tab实现Tab(App主界面)

    学习内容来自“慕课网” ViewPager与FragmentPagerAdapter实现Tab 将这两种实现Tab的方法结合起来.效果就是可以拖动内容区域来改变相应的功能图标亮暗 思路: Fragme ...

  8. Android子线程更新主界面

    学习什么的还是要真正的有应用,有需求才能在最短的时间里面牢牢掌握一项技术. 今天就是这样的,产品一个需求下来,十万火急啊.然后之前只稍稍接触过,只能硬着头皮上了.最后牢牢地掌握了最简单的Handler ...

  9. 解决 主界面mainactivity 中fragment弹框把下面tab选项卡 顶上去的方案

     android:windowSoftInputMode="adjustPan"            android:configChanges="screenSize ...

随机推荐

  1. linq any()方法实现sql in()方法的效果

    public IQueryable<Vsec009ComSecComp> QueryList(Sec009ComSecCompQueryCondition condition) { var ...

  2. linux下测试磁盘的读写IO速度【转】

    Reference1:http://server.chinabyte.com/495/12361995.shtmlReference2:https://www.deleak.com/blog/2011 ...

  3. 如何跳到系统设置界面-b

    NSURL *url = [NSURL URLWithString:@"prefs:root=WIFI"]; if ([[UIApplication sharedApplicati ...

  4. m个苹果放在n个筐里,每个筐至少一个,所有的筐都一样,有多少种放法

    package com.study; import java.io.BufferedReader; import java.io.IOException; import java.io.InputSt ...

  5. python多线程threading.Lock锁用法实例

    本文实例讲述了python多线程threading.Lock锁的用法实例,分享给大家供大家参考.具体分析如下: python的锁可以独立提取出来 mutex = threading.Lock() #锁 ...

  6. BZOJ 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏

    Description Farmer John 想让她的奶牛准备郡级跳跃比赛,贝茜和她的伙伴们正在练习跨栏.她们很累,所以她们想消耗最少的能量来跨栏. 显然,对于一头奶牛跳过几个矮栏是很容易的,但是高 ...

  7. js node

    http://blogs.msdn.com/b/scott_hanselman/archive/2011/11/29/window-iis-node-js.aspx http://www.16kan. ...

  8. 当函数没有return时错误

    error:control reaches end of non-void function 在对应函数+return   :  即可

  9. gunicorn启动报错gunicorn.errors.HaltServer

    启动gunicorn报错: # gunicorn -b :9008 -w 2 webserver:app 2013-12-10 09:12:58 [29701] [INFO] Starting gun ...

  10. Beta Round #9 (酱油杯noi考后欢乐赛)PLQ和他的小伙伴们

    题目:http://www.contesthunter.org/contest/Beta%20Round%20%EF%BC%839%20%28%E9%85%B1%E6%B2%B9%E6%9D%AFno ...