android中ListView多次刷新重复执行getView的解决方法

来源:互联网 发布:最新网络流行语段子 编辑:程序博客网 时间:2024/06/02 03:14

1.在android开发中,遇到listview的item中文本输入EditText中如果存在addTextChangedListener(new TextWatcher()的监听,导致多次执行监听代码从而使EditText的焦点多次变化,原本需要的数字输入法也出现快速切换的情况,这显然不是需求所容许的,所以也尝试过很多种网上所说的方法,结果是都没什么作用,最终只能放弃listview,改为LinearLayout动态添加view的方式实现列表,问题顺利解决。


2.出现这一情况的原因是listview的gridview()方法多次执行的原因,后来找到一种方法,自定义listview中加入标识,来去除重复执行的部分,如下:

public class WarmhomeListView extends ListView {public boolean isOnMeasure = false;public WarmhomeListView(Context context) {super(context);}public WarmhomeListView(Context context, AttributeSet attrs) {super(context, attrs);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {isOnMeasure = true;int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);super.onMeasure(widthMeasureSpec, expandSpec);}@Overrideprotected void onLayout(boolean changed, int l, int t, int r, int b) {isOnMeasure = false;super.onLayout(changed, l, t, r, b);}}


在gridview()方法里加入以下代码:

@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder = null;if (convertView == null) {convertView = LayoutInflater.from(mContext).inflate(R.layout.layout_skuslist_catalog, null);holder = new ViewHolder(convertView);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}if(!(WarmhomeListView)parent.isOnMeasure) {return;}Catalog catalog = list.get(position);String selected = catalog.selected;if ("1".equals(selected)) {holder.tv_name.setBackgroundResource(R.drawable.activity_common_radius_byellow);holder.tv_name.setTextColor(mContext.getResources().getColor(R.color.red));} else {holder.tv_name.setBackgroundResource(R.drawable.activity_common_radius_gray2);holder.tv_name.setTextColor(mContext.getResources().getColor(R.color.textColorNormal));}holder.tv_id.setText(catalog.id);holder.tv_name.setText(catalog.name);return convertView;}


3.如果listview高度计算有误,底部一列无法显示,检查也许是你item里有textview文本类的组件高度是自适应的,那就应当重写组件,让其自己计算高度,如下:
public class MyTextView4TypeFaceAndHeight extends TextView {     private Context context;    public MyTextView4TypeFaceAndHeight(Context context) {        super(context);        init(context);    }    public MyTextView4TypeFaceAndHeight(Context context, AttributeSet attrs) {        super(context, attrs);        init(context);    }    public MyTextView4TypeFaceAndHeight(Context context, AttributeSet attrs, int defSyle) {        super(context, attrs, defSyle);        init(context);    }    public void init(Context context) {     if (isInEditMode()) {    return;    }        this.context = context;    }    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);Layout layout = getLayout();if (layout != null) {int height = (int) FloatMath.ceil(getMaxLineHeight(this.getText().toString())) + getCompoundPaddingTop()+ getCompoundPaddingBottom();int width = getMeasuredWidth();setMeasuredDimension(width, height);}}private float getMaxLineHeight(String str) {float height = 0.0f;float screenW = ((Activity) context).getWindowManager().getDefaultDisplay().getWidth();float paddingLeft;float paddingReft;ViewParent l = this.getParent();if (l instanceof RelativeLayout) {paddingLeft = ((RelativeLayout) this.getParent()).getPaddingLeft();paddingReft = ((RelativeLayout) this.getParent()).getPaddingRight();} else {paddingLeft = ((LinearLayout) this.getParent()).getPaddingLeft();paddingReft = ((LinearLayout) this.getParent()).getPaddingRight();}// 这里具体this.getPaint()要注意使用,要看你的TextView在什么位置,这个是拿TextView父控件的Padding的,为了更准确的算出换行int line = (int) Math.ceil((this.getPaint().measureText(str) / (screenW - paddingLeft - paddingReft)));height = (this.getPaint().getFontMetrics().descent - this.getPaint().getFontMetrics().ascent) * line;return height;}}



0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小米儿童手表二维码丢了怎么办 艾蔻手表二维码丢失了怎么办 玩具直升机遥控器坏了怎么办 玩具飞机遥控器坏了怎么办 玩具无人机遥控器坏了怎么办 玩具遥控车遥控器坏了怎么办 用遥控器关电视后打不开怎么办 汽车遥控器按键坏了怎么办 用遥控器关了电视打不开怎么办 遥控器一个按键坏了怎么办 电视用遥控器关的打不开怎么办 电动车遥控器按键坏了怎么办 海尔空调遥控器按键坏了怎么办 汽车手机支架吸盘吸不住怎么办 车载手机支架吸盘坏了怎么办 假牙的吸盘坏了怎么办 燃气费用一直未交怎么办 凌度gps模块无法定位怎么办? 放疗定位线掉了怎么办 被网络平台骗了怎么办 手机重力传感器坏了怎么办 锤子手机重力传感器坏了怎么办 平板电脑没有开关键怎么办 手机重力感应器坏了怎么办 苹果手机重力感应器坏了怎么办 苹果手机陀螺仪坏了怎么办 狗狗的爪子肿了怎么办 压缩文件之后显示拒绝访问怎么办 压缩文件解压后全散开了怎么办 dnf助手改名字用完了怎么办 缅甸 佤邦 办中国护照 怎么办? 电脑玩游戏网络延迟大怎么办 qq好友空间锁了怎么办 卡盟进货额不足怎么办 被朋友骗了钱怎么办 联通在学校网差怎么办 前夫把我微信拉黑 孩子的事怎么办 微信好友验证疑似被盗怎么办 我的世界被banip怎么办 dnf深渊宝珠出了怎么办 吞噬魔4个球吃了怎么办