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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年03月13日 17时08分30秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
select 移动端 第一个无法选中_Python爬虫微博(移动端)评论
2021-06-24
唱好铁血丹心谐音正规_趙贤典:打好“感情牌” 唱好“大合唱”
2021-06-24
aix系统vi修改命令_Linux基础知识必备:利用vi编辑器创建和编辑正文文件
2021-06-24
天涯明月刀开发_玩家被天涯明月刀手游“冷落”?六大门派角色竟不带正眼看人...
2021-06-24
this指向undefined uiapp_一个this都没有,真好
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
ocdma相干非相干_《Acconeer 60GHz脉冲相干雷达芯片:A111》
2019-04-21
修改表格字体颜色_Excel技巧:Excel如何修改字体颜色
2019-04-21
prism项目搭建 wpf_WPF MVVM使用prism4.1搭建
2019-04-21