最近项目要实现ScrollView中嵌套广告轮播图+RecyleView卡片布局,并且RecyleView按照header和内容的排列样式,因为RecyleView的可扩展性很强,所以我毫无疑问的选择了它,而且让RecyleView实现了可拖拽的效果,

最后我再加上了下拉刷新的效果(这里我用的下拉刷新控件是三方的SmartRefreshLayout)。记得刚开始实现这个效果的时候还是十分的得心印手。可是当我测试的时候,发现RecyleView的子item的拖拽效果并不流畅,起初我以

为是由于RecyleView和ScrollView的滑动冲突导致的,可是慢慢我自己重新写了个demo,逐步调试,发现肯定是下拉刷新控件和ScrollView的原因造成的,于是对症下药,终于找到了解决的办法,这里将我的答案记录下来,为了

后面其他的人遇到和我一样的问题,避免他们走很多的弯路,希望会对他们有所帮助,当然把自己遇到问题和解决问题的办法都记录下来,这对自己来说也是一种成长。如果有其他更好的思路,希望给我留言,谢谢。

 解决办法一:

        在布局页面中把ScrollView控件换成NestedScrollView控件:

        对NestedScrollView的详解:http://www.cnblogs.com/skytwo/p/4613912.html

  1.     
  1. <android.support.v4.widget.NestedScrollView
  2.      android:layout_width="match_parent"
  3.      android:layout_height="match_parent">
  4.  
  5.       ..............
  6.  
  7. </android.support.v4.widget.NestedScrollView>
  1. 以下是简单demo

  1.  
  2. MainActivity:用底部BottomNavigationBar,实现viewpagerfragment连用
  1. 代码:
  1. public class MainActivity extends AppCompatActivity implements BottomNavigationBar.OnTabSelectedListener,ViewPager.OnPageChangeListener{
  2. private ViewPager viewPager;
  3. private BottomNavigationBar bottomNavigationBar;
  4.  
  5. //存放fragment的集合
  6. private Fragment[] fragments;
  7.  
  8. //切换不同fragment用的下标
  9. private int index;
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.activity_main);
  14. initBottomNavigationBar();
  15. initViewPager();
  16.  
  17. }
  18. //初始化底部导航菜单
  19. private void initBottomNavigationBar() {
  20. bottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar);
  21. bottomNavigationBar.setTabSelectedListener(this);
  22. bottomNavigationBar.clearAll();
  23. bottomNavigationBar.setMode(BottomNavigationBar.MODE_FIXED);
  24. bottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC);
  25. bottomNavigationBar.addItem(new BottomNavigationItem(R.drawable.ic_launcher,"主页").setInactiveIconResource(R.drawable.ic_launcher).setActiveColorResource(R.color.colorPrimaryDark))
  26. .addItem(new BottomNavigationItem(R.drawable.ic_launcher,"单据").setInactiveIconResource(R.drawable.ic_launcher).setActiveColorResource(R.color.colorPrimaryDark))
  27. .addItem(new BottomNavigationItem(R.drawable.ic_launcher, "审核").setInactiveIconResource(R.drawable.ic_launcher).setActiveColorResource(R.color.colorPrimaryDark))
  28. .addItem(new BottomNavigationItem(R.drawable.ic_launcher, "报表").setInactiveIconResource(R.drawable.ic_launcher).setActiveColorResource(R.color.colorPrimaryDark))
  29. .addItem(new BottomNavigationItem(R.drawable.ic_launcher,"设置").setInactiveIconResource(R.drawable.ic_launcher).setActiveColorResource(R.color.colorPrimaryDark))
  30. .initialise();
  31. }
  32. //初始化viewpager
  33. private void initViewPager() {
  34. viewPager = (ViewPager) findViewById(R.id.view_pager);
  35. fragments = new Fragment[];
  36. fragments[]=new FragOne();
  37. fragments[]=new FragTwo();
  38. fragments[]=new FragThree();
  39. fragments[]=new FragFour();
  40. fragments[]=new FragFive();
  41.  
  42. viewPager.setOffscreenPageLimit();
  43. viewPager.setAdapter(new SectionsPagerAdapter(getSupportFragmentManager(), fragments));
  44. viewPager.addOnPageChangeListener(this);
  45. viewPager.setCurrentItem();
  46.  
  47. }
  48. @Override
  49. public void onTabSelected(int position) {
  50. viewPager.setCurrentItem(position);
  51. }
  52.  
  53. @Override
  54. public void onTabUnselected(int position) {
  55.  
  56. }
  57.  
  58. @Override
  59. public void onTabReselected(int position) {
  60.  
  61. }
  62.  
  63. @Override
  64. public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
  65.  
  66. }
  67.  
  68. @Override
  69. public void onPageSelected(int i) {
  70. bottomNavigationBar.selectTab(i);
  71. this.index = i;
  72.  
  73. }
  74.  
  75. @Override
  76. public void onPageScrollStateChanged(int state) {
  77.  
  78. }
  79.  
  80. class SectionsPagerAdapter extends FragmentPagerAdapter {
  81. Fragment fragments[]=new Fragment[];
  82.  
  83. public SectionsPagerAdapter(FragmentManager fm, Fragment fragments[]) {
  84. super(fm);
  85. this.fragments = fragments;
  86. }
  87.  
  88. @Override
  89. public Fragment getItem(int position) {
  90. return fragments[position];
  91. }
  92.  
  93. @Override
  94. public int getCount() {
  95. return fragments.length;
  96. }
  97. }
  98. }
  1. MainActity布局:
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:app="http://schemas.android.com/apk/res-auto"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:orientation="vertical"
  7. tools:context="com.example.admin.demo.MainActivity">
  8.  
  9. <android.support.v4.view.ViewPager
  10. android:id="@+id/view_pager"
  11. android:layout_width="match_parent"
  12. android:layout_height="0dp"
  13. android:layout_weight=""
  14. />
  15. <com.ashokvarma.bottomnavigation.BottomNavigationBar
  16. android:id="@+id/bottom_navigation_bar"
  17. android:layout_width="wrap_content"
  18. android:layout_height="wrap_content"
  19. android:layout_gravity="bottom"
  20. />
  21.  
  22. </LinearLayout>
  1. fragment:实现下拉刷新、上拉加载、RecyleView拖拽等各种效果的fragment
  1. public class FragOne extends Fragment implements MyItemTouchCallback.OnDragListener {
  2. private List<String> list = new ArrayList<String>();
  3. private View parent;
  4. //显示模块的recyleview
  5. private RecyclerView mRecyclerView;
  6. //可拖动模块的帮助类
  7. private ItemTouchHelper itemTouchHelper;
  8. //适配器
  9. private RecyleViewAdapter mRecyclerAdapter;
  10.  
  11. //声明刷新控件
  12. private SmartRefreshLayout srf;
  13.  
  14. @Override
  15. public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
  16. parent = inflater.inflate(R.layout.frag_one, container, false);
  17. initView();
  18. return parent;
  19. }
  20. private void initView() {
  21. for (int i = ; i < ; i++) {
  22. list.add(i + "");
  23. }
  24. mRecyclerView = (RecyclerView) parent.findViewById(recyclerView);
  25.  
  26. // 设置添加删除item的时候的动画效果
  27. mRecyclerView.setItemAnimator(new DefaultItemAnimator());
  28.  
  29. GridLayoutManager gridLayoutManager = new GridLayoutManager(getActivity(), );
  30. gridLayoutManager.setSmoothScrollbarEnabled(true);
  31. gridLayoutManager.setAutoMeasureEnabled(true);
  32.  
  33. mRecyclerView.setLayoutManager(gridLayoutManager);
  34. mRecyclerView.setHasFixedSize(true);
  35. mRecyclerView.setNestedScrollingEnabled(false);
  36.  
  37. // 设置适配器
  38. mRecyclerAdapter = new RecyleViewAdapter(list);
  39. itemTouchHelper = new ItemTouchHelper(new MyItemTouchCallback(mRecyclerAdapter).setOnDragListener(this));
  40. itemTouchHelper.attachToRecyclerView(mRecyclerView);
  41. mRecyclerView.setAdapter(mRecyclerAdapter);
  42. mRecyclerView.addOnItemTouchListener(new OnRecyclerItemClickListener(mRecyclerView) {
  43. @Override
  44. public void onLongClick(RecyclerView.ViewHolder vh) {
  45. itemTouchHelper.startDrag(vh);
  46. VibratorUtil.Vibrate(getActivity(), ); //震动70ms
  47. }
  48.  
  49. @Override
  50. public void onItemClick(RecyclerView.ViewHolder vh) {
  51. super.onItemClick(vh);
  52. }
  53. });
  54. srf = (SmartRefreshLayout) parent.findViewById(R.id.refresh);
  55. srf.setDefaultRefreshHeaderCreater(new DefaultRefreshHeaderCreater() {
  56. @Override
  57. public RefreshHeader createRefreshHeader(Context context, RefreshLayout layout) {
  58. return new ClassicsHeader(context);//指定为经典Header,默认是 贝塞尔雷达Header
  59. }
  60. });
  61. srf.setOnRefreshListener(new OnRefreshListener() {
  62. @Override
  63. public void onRefresh(RefreshLayout refreshlayout) {
  64. srf.postDelayed(new Runnable() {
  65. @Override
  66. public void run() {
  67. mRecyclerAdapter.notifyDataSetChanged();
  68.  
  69. srf.finishRefresh();
  70. Toast.makeText(getActivity(), "刷新成功", Toast.LENGTH_SHORT).show();
  71. }
  72. }, );
  73. }
  74. });
  75. srf.setEnableLoadmore(false);//屏蔽掉上拉加载的效果
  76.  
  77. }
  78.  
  79. @Override
  80. public void onFinishDrag() {
  81.  
  82. }
  83.  
  84. class RecyleViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> implements MyItemTouchCallback.ItemTouchAdapter {
  85. private List<String> mData;
  86.  
  87. public RecyleViewAdapter(List<String> data) {
  88. mData = data;
  89. }
  90.  
  91. @Override
  92. public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  93. return new TestViewHolder(View.inflate(parent.getContext(), R.layout.item_test, null));
  94. }
  95.  
  96. @Override
  97. public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
  98. TestViewHolder tHolder = (TestViewHolder) holder;
  99. tHolder.tv.setText(mData.get(position));
  100. }
  101.  
  102. @Override
  103. public int getItemCount() {
  104. return mData == null ? : mData.size();
  105. }
  106.  
  107. @Override
  108. public void onMove(int fromPosition, int toPosition) {
  109. if (fromPosition < toPosition) {
  110. for (int i = fromPosition; i < toPosition; i++) {
  111. Collections.swap(mData, i, i + );
  112. }
  113. } else {
  114. for (int i = fromPosition; i > toPosition; i--) {
  115. Collections.swap(mData, i, i - );
  116. }
  117. }
  118. notifyItemMoved(fromPosition, toPosition);
  119. }
  120.  
  121. @Override
  122. public void onSwiped(int position) {
  123. mData.remove(position);
  124. notifyItemRemoved(position);
  125.  
  126. }
  127.  
  128. private class TestViewHolder extends RecyclerView.ViewHolder {
  129. TextView tv;
  130.  
  131. public TestViewHolder(View itemView) {
  132. super(itemView);
  133. tv = (TextView) itemView.findViewById(R.id.tv);
  134. }
  135.  
  136. }
  137.  
  138. }
  1. fragment布局:
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="match_parent"
  3. android:layout_height="match_parent"
  4. android:orientation="vertical">
  5.  
  6. <com.scwang.smartrefresh.layout.SmartRefreshLayout
  7. android:id="@+id/refresh"
  8. android:layout_width="match_parent"
  9. android:layout_height="match_parent">
  10.  
  11. <android.support.v4.widget.NestedScrollView
  12. android:layout_width="match_parent"
  13. android:layout_height="match_parent">
  14.  
  15. <LinearLayout
  16. android:layout_width="match_parent"
  17. android:layout_height="match_parent"
  18. android:orientation="vertical">
  19.  
  20. <TextView
  21. android:layout_width="wrap_content"
  22. android:layout_height="wrap_content"
  23. android:text="@string/test" />
  24.  
  25. <RelativeLayout
  26. android:layout_width="match_parent"
  27. android:layout_height="match_parent"
  28. android:descendantFocusability="blocksDescendants">
  29.  
  30. <android.support.v7.widget.RecyclerView
  31. android:id="@+id/recyclerView"
  32. android:layout_width="match_parent"
  33. android:layout_height="wrap_content"></android.support.v7.widget.RecyclerView>
  34. </RelativeLayout>
  35. </LinearLayout>
  36. </android.support.v4.widget.NestedScrollView>
  37. </com.scwang.smartrefresh.layout.SmartRefreshLayout>
  38.  
  39. </LinearLayout>
  1. RecyleView实现可拖拽效果的帮助类:
  1. MyItemTouchCallback :
  1. public class MyItemTouchCallback extends ItemTouchHelper.Callback {
  2.  
  3. private ItemTouchAdapter itemTouchAdapter;
  4. public MyItemTouchCallback(ItemTouchAdapter itemTouchAdapter){
  5. this.itemTouchAdapter = itemTouchAdapter;
  6. }
  7.  
  8. @Override
  9. public boolean isLongPressDragEnabled() {
  10. return false;
  11. }
  12.  
  13. @Override
  14. public boolean isItemViewSwipeEnabled() {
  15. return true;
  16. }
  17.  
  18. @Override
  19. public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
  20. if (recyclerView.getLayoutManager() instanceof GridLayoutManager) {
  21. final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN |
  22. ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
  23. final int swipeFlags = ;
  24. return makeMovementFlags(dragFlags, swipeFlags);
  25. } else {
  26. final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
  27. final int swipeFlags = ;
  28. return makeMovementFlags(dragFlags, swipeFlags);
  29. }
  30. }
  31.  
  32. @Override
  33. public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
  34. int fromPosition = viewHolder.getAdapterPosition();//得到拖动ViewHolder的position
  35. int toPosition = target.getAdapterPosition();//得到目标ViewHolder的position
  36. itemTouchAdapter.onMove(fromPosition,toPosition);
  37. return true;
  38. }
  39.  
  40. @Override
  41. public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
  42. int position = viewHolder.getAdapterPosition();
  43. itemTouchAdapter.onSwiped(position);
  44.  
  45. }
  46.  
  47. @Override
  48. public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
  49. if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
  50. //滑动时改变Item的透明度
  51. final float alpha = - Math.abs(dX) / (float) viewHolder.itemView.getWidth();
  52. viewHolder.itemView.setAlpha(alpha);
  53. viewHolder.itemView.setTranslationX(dX);
  54. } else {
  55. super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
  56. }
  57. }
  58.  
  59. @Override
  60. public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
  61. if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) {
  62. if (background == null && bkcolor == -) {
  63. Drawable drawable = viewHolder.itemView.getBackground();
  64. if (drawable == null) {
  65. bkcolor = ;
  66. } else {
  67. background = drawable;
  68. }
  69. }
  70. viewHolder.itemView.setBackgroundColor(Color.LTGRAY);
  71. }
  72. super.onSelectedChanged(viewHolder, actionState);
  73. }
  74.  
  75. @Override
  76. public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
  77. super.clearView(recyclerView, viewHolder);
  78.  
  79. viewHolder.itemView.setAlpha(1.0f);
  80. if (background != null) viewHolder.itemView.setBackgroundDrawable(background);
  81. if (bkcolor != -) viewHolder.itemView.setBackgroundColor(bkcolor);
  82. //viewHolder.itemView.setBackgroundColor(0);
  83.  
  84. if (onDragListener!=null){
  85. onDragListener.onFinishDrag();
  86. }
  87. }
  88.  
  89. private Drawable background = null;
  90. private int bkcolor = -;
  91.  
  92. private OnDragListener onDragListener;
  93. public MyItemTouchCallback setOnDragListener(OnDragListener onDragListener) {
  94. this.onDragListener = onDragListener;
  95. return this;
  96. }
  97. public interface OnDragListener{
  98. void onFinishDrag();
  99. }
  100.  
  101. public interface ItemTouchAdapter {
  102. void onMove(int fromPosition, int toPosition);
  103. void onSwiped(int position);
  104. }
  105. }
  1. OnRecyclerItemClickListener:
  1. public class OnRecyclerItemClickListener implements RecyclerView.OnItemTouchListener{
  2. private GestureDetectorCompat mGestureDetector;
  3. private RecyclerView recyclerView;
  4.  
  5. public OnRecyclerItemClickListener(RecyclerView recyclerView){
  6. this.recyclerView = recyclerView;
  7. mGestureDetector = new GestureDetectorCompat(recyclerView.getContext(),new ItemTouchHelperGestureListener());
  8. }
  9. @Override
  10. public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
  11. mGestureDetector.onTouchEvent(e);
  12. return false;
  13. }
  14.  
  15. @Override
  16. public void onTouchEvent(RecyclerView rv, MotionEvent e) {
  17. mGestureDetector.onTouchEvent(e);
  18. }
  19.  
  20. @Override
  21. public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
  22.  
  23. }
  24. private class ItemTouchHelperGestureListener extends GestureDetector.SimpleOnGestureListener {
  25.  
  26. @Override
  27. public boolean onSingleTapUp(MotionEvent e) {
  28. View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
  29. if (child!=null) {
  30. RecyclerView.ViewHolder vh = recyclerView.getChildViewHolder(child);
  31. onItemClick(vh);
  32. }
  33. return true;
  34. }
  35. @Override
  36. public void onLongPress(MotionEvent e) {
  37. View child = recyclerView.findChildViewUnder(e.getX(), e.getY());
  38. if (child!=null) {
  39. RecyclerView.ViewHolder vh = recyclerView.getChildViewHolder(child);
  40. onLongClick(vh);
  41. }
  42. }
  43. }
  44. public void onLongClick(RecyclerView.ViewHolder vh){}
  45. public void onItemClick(RecyclerView.ViewHolder vh){}
  46. }
  1.  VibratorUtil(手机振动工具类)
  1. /**
  2. * 手机震动工具类
  3. * @author Administrator
  4. * 使用必须添加权限:<uses-permission android:name="android.permission.VIBRATE" />
  5. */
  6. public class VibratorUtil {
  7.  
  8. /**
  9. * final Activity activity :调用该方法的Activity实例
  10. * long milliseconds :震动的时长,单位是毫秒
  11. * long[] pattern :自定义震动模式 。数组中数字的含义依次是[静止时长,震动时长,静止时长,震动时长。。。]时长的单位是毫秒
  12. * boolean isRepeat : 是否反复震动,如果是true,反复震动,如果是false,只震动一次
  13. */
  14. public static void Vibrate(final Activity activity, long milliseconds) {
  15. Vibrator vib = (Vibrator) activity.getSystemService(Service.VIBRATOR_SERVICE);
  16. vib.vibrate(milliseconds);
  17. }
  18. public static void Vibrate(final Activity activity, long[] pattern, boolean isRepeat) {
  19. Vibrator vib = (Vibrator) activity.getSystemService(Service.VIBRATOR_SERVICE);
  20. vib.vibrate(pattern, isRepeat ? : -);
  21. }
  22.  
  23. }

Android 解决下拉刷新控件和ScrollVIew的滑动冲突问题。的更多相关文章

  1. Android解决下拉刷新控件SwipeRefreshLayout和ViewPager的滑动冲突

    直接说明下我自己项目中的情况,如图: 外部嵌套任何一种refresh下拉控件之后,上方的viewpager左右滑动事件都受到影响,滑动不流畅,稍微有点向下的趋势就会触发刷新. 起初以为可能跟不同下拉控 ...

  2. Android PullToRefresh下拉刷新控件的简单使用

    PullToRefresh这个开源库早就听说了,不过一直没用过.作为一个经典的的开源库,我觉得还是有必要认识一下. 打开github上的网址:https://github.com/chrisbanes ...

  3. android官方下拉刷新控件SwipeRefreshLayout的使用

    可能开发安卓的人大多数都用过很多下拉刷新的开源组件,但是今天用了官方v4支持包的SwipeRefreshLayout觉得效果也蛮不错的,特拿出来分享. 简介:SwipeRefreshLayout组件只 ...

  4. 【转】Android官方下拉刷新控件 SwipeRefreshLayout

    今天在Google+上看到了SwipeRefreshLayout这个名词,遂搜索了下,发现竟然是刚刚google更新sdk新增加的一个widget,于是赶紧抢先体验学习下. SwipeRefreshL ...

  5. 基于PtrFrameLayout实现自定义仿京东下拉刷新控件

    前言 最近基于项目需要,使用PtrFrameLayout框架实现了自定义的下拉刷新控件,大体效果类似于京东APP的下拉刷新动态效果.在这里和大家分享一下具体的思路和需要注意的地方,以便帮助有类似开发和 ...

  6. [Android]下拉刷新控件RefreshableView的实现

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4172483.html 需求:自定义一个ViewGroup,实现 ...

  7. android SwipeRefreshLayout google官方下拉刷新控件

    下拉刷新功能之前一直使用的是XlistView很方便我前面的博客有介绍 SwipeRefreshLayout是google官方推出的下拉刷新控件使用方法也比较简单 今天就来使用下SwipeRefres ...

  8. Android SwipeRefreshLayout 官方下拉刷新控件介绍

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24521483 下面App基本都有下拉刷新的功能,以前基本都使用XListView ...

  9. Android仿苹果版QQ下拉刷新实现(一) ——打造简单平滑的通用下拉刷新控件

    前言: 忙完了结婚乐APP的开发,终于可以花一定的时间放在博客上了.好了,废话不多说,今天我们要带来的效果是苹果版本的QQ下拉刷新.首先看一下目标效果以及demo效果:      因为此效果实现的步骤 ...

随机推荐

  1. Spring学习笔记(二) 初探Spring

    版权声明 笔记出自<Spring 开发指南>一书. Spring 初探 前面我们简单介绍了 Spring 的基本组件和功能,现在我们来看一个简单示例: Person接口Person接口定义 ...

  2. centOS 7安装mysql5.6

    方法二:官网下载安装mysql-server # wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm # rp ...

  3. Kylin基础教程(一)

    一.Kylin介绍 1.1 现状 Hadoop于2006年初步实现,改变了企业级的大数据存储(基于HDFS)和批处理(主要基于MR)问题,10几年过去了,数据量随着互联网的发展井喷式增长,如何高速.低 ...

  4. c# TextBox

    1. text内容全选事件 textBox1.selectAll(); 2.失去与获取焦点事件 textox1.LostFocus += new EventHandler(txt_LostFocus) ...

  5. 2015 Objective-C 新特性

    Overview 自 WWDC 2015 推出和开源 Swift 2.0 后,大家对 Swift 的热情又一次高涨起来,在羡慕创业公司的朋友们大谈 Swift 新特性的同时,也有很多像我一样工作上依然 ...

  6. python3 django动态分页引发的list切片下标越界问题

    起先是扒了一个包,动态分页的,但这个包分页之前要加载全部的数据,我这东西后台是个爬虫,不一定浏览的完所以这么做有点浪费资源,于是我改造了一下. # :param obj_count: 获得 条目总数# ...

  7. 基于better-scroll封装一个上拉加载下拉刷新组件

    1.起因 上拉加载和下拉刷新在移动端项目中是很常见的需求,遂自己便基于better-scroll封装了一个下拉刷新上拉加载组件. 2.过程 better-scroll是目前比较好用的开源滚动库,提供很 ...

  8. php 与 nginx 的两种处理方式

    1.IP:Port 监听方式 php-fpm docker pull PHP:2.4-alpine nginx.conf fastcgi_pass 127.0.0.1:9000; php-fpm 在容 ...

  9. if判断语句

     6)if判断语句   if ... then   else   end if;     if ... then   elsif ... then   elsif ... then   else   ...

  10. Java线程演示样例 - 继承Thread类和实现Runnable接口

    进程(Process)和线程(Thread)是程序执行的两个基本单元. Java并发编程很多其它的是和线程相关. 进程 进程是一个独立的执行单元,可将其视为一个程序或应用.然而,一个程序内部同事还包括 ...