BaseAdapter导致notifyDataSetChanged()无效的三个原因及处理方法
发布日期:2021-09-08 15:09:28 浏览次数:17 分类:技术文章

本文共 4367 字,大约阅读时间需要 14 分钟。

原文  

 

前一段时间在做一个项目的时候遇到了一个关于BaseAdapter的notifyDataSetChanged()方法无效问题,当时在网上搜了一个解决方法,今天又遇到了一个类似的问题,我在这里做个记录,防止以后再次发生,或者其他朋友再次遇到。

一、ScrollView中嵌套ListView或GridView

原因:两个的滚动监听冲突

解决方法:重写ListView或GridView

package com.meritit.lottery.view;import android.content.Context;import android.util.AttributeSet;import android.widget.ListView;public class SerialListView extends ListView {  public SerialListView(Context context, AttributeSet attrs, int defStyle) {    super(context, attrs, defStyle);    // TODO Auto-generated constructor stub  }  public SerialListView(Context context, AttributeSet attrs) {    super(context, attrs);    // TODO Auto-generated constructor stub  }  public SerialListView(Context context) {    super(context);    // TODO Auto-generated constructor stub  }  /**   * 为了取消滚动效果,可以放入滚动组建中重写了此方法   */  @Override  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {    int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,        MeasureSpec.AT_MOST);    super.onMeasure(widthMeasureSpec, expandSpec);  }}

 

二、ListView或GridView的外部容器重写onTouchEvent(MotionEvent event)方法

详细请看:http://blog.csdn.net/xxxzhi/article/details/12314775

这类问题解决方法很简单,只需要onTouchEvent返回false即可

例如:

@Override  public boolean onTouchEvent(MotionEvent event) {    // TODO Auto-generated method stub                                     final int action = event.getAction();              final float x = event.getX();              final float y = event.getY();                            switch (action) {              case MotionEvent.ACTION_DOWN:                   System.out.println("父类点击onTouchEvent");                Log.i("", "onTouchEvent  ACTION_DOWN");                                if (mVelocityTracker == null) {                      mVelocityTracker = VelocityTracker.obtain();                      mVelocityTracker.addMovement(event);           }                           if (!mScroller.isFinished()){                      mScroller.abortAnimation();                  }                              mLastMotionX = x;                             mLastMotionY = y;                             break;                                case MotionEvent.ACTION_MOVE:                System.out.println("父类滑动onTouchEvent");               int deltaX = (int)(mLastMotionX - x);                                if (IsCanMove(deltaX))                 {                   if (mVelocityTracker != null)                     {                            mVelocityTracker.addMovement(event);                      }                       mLastMotionX = x;                         scrollBy(deltaX, 0);                     }                      break;                                  case MotionEvent.ACTION_UP:                     System.out.println("父类放开onTouchEvent");              int velocityX = 0;              if (mVelocityTracker != null)              {                  mVelocityTracker.addMovement(event);                   mVelocityTracker.computeCurrentVelocity(1000);                    velocityX = (int) mVelocityTracker.getXVelocity();              }                                                     if (velocityX > SNAP_VELOCITY && mCurScreen > 0) {                         // Fling enough to move left                         Log.e(TAG, "snap left");                      snapToScreen(mCurScreen - 1);                     } else if (velocityX < -SNAP_VELOCITY                             && mCurScreen < getChildCount() - 1) {                         // Fling enough to move right                         Log.e(TAG, "snap right");                      snapToScreen(mCurScreen + 1);                     } else {                         snapToDestination();                     }                                                  if (mVelocityTracker != null) {                         mVelocityTracker.recycle();                         mVelocityTracker = null;                     }               //      mTouchState = TOUCH_STATE_REST;              break;                }                              return false;      }

 

三、数据传值问题

注意改变Adapter内的数据,如下:list_contents和toparr是改变后的数据

mycqbaseAdapter.contents=list_contents;    mycqtitleAdapter.toparr = toparr;    mycqbaseAdapter.notifyDataSetChanged();  mycqtitleAdapter.notifyDataSetChanged();

有一种错误的写法就是直接调用notifyData方法

mycqbaseAdapter.notifyDataSetChanged();    mycqtitleAdapter.notifyDataSetChanged();

转载地址:https://blog.csdn.net/weixin_34326429/article/details/90198749 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:微信快速发送位置定位怎么弄【微信高级教程4】
下一篇:程序猿的日常——Java基础之抽象类与接口、枚举、泛型

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年03月13日 17时08分30秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

select 移动端 第一个无法选中_Python爬虫微博(移动端)评论 2021-06-24
华为云welink成像是反的_华为发布智能办公神器WeLink,可连接会议室开会,还可一键遥控报销和智能翻译... 2021-06-24
唱好铁血丹心谐音正规_趙贤典:打好“感情牌” 唱好“大合唱” 2021-06-24
aix系统vi修改命令_Linux基础知识必备:利用vi编辑器创建和编辑正文文件 2021-06-24
天涯明月刀开发_玩家被天涯明月刀手游“冷落”?六大门派角色竟不带正眼看人... 2021-06-24
this指向undefined uiapp_一个this都没有,真好 2021-06-24
add p4 多个文件_2-3【微信小程序全栈开发课程】index页面完善--vue文件代码解析... 2021-06-24
5w2h原则指的是什么_什么是5W2H分析法?一首小诗带入进入大门。 2021-06-24
技校毕业是什么学历_中等职业学校是什么_中等职业学校毕业是什么学历 2019-04-21
2压缩备份数据库_MySQL数据备份与恢复(二) xtrabackup工具 2019-04-21
英特尔cpu发布时间表_被嘲讽的英特尔核显,强大能力其实超乎你的想象 2019-04-21
chi2inv函数 matlab_MATLAB概率和统计(2) 2019-04-21
lisp修改上一个图素_在Windows上安装Haskell 2019-04-21
ad19 导出step 没有pcb_几款主流PCB软件哪个最好用,你用过几款? 2019-04-21
json mysql 字段 默认值_Newtonsoft.Json 六个超简单又实用的特性,值得一试 【上篇】... 2019-04-21
ocdma相干非相干_《Acconeer 60GHz脉冲相干雷达芯片:A111》 2019-04-21
修改表格字体颜色_Excel技巧:Excel如何修改字体颜色 2019-04-21
native react 变颜色 点击_React Native主动更改StackNavigator标头颜色 2019-04-21
prism项目搭建 wpf_WPF MVVM使用prism4.1搭建 2019-04-21
python发微信红包群_用Python实现微信自动化抢红包,再也不用担心抢不到红包了... 2019-04-21