多次调用Android自定义ArrayAdapter getView方法 – 重置动态TextView值

多次调用Android自定义ArrayAdapter getView方法 – 重置动态TextView值,第1张

概述我的自定义ArrayAdapter中的getView方法被多次调用,我认为这是有意的.问题是,我有一个动态设置的数量TextView但是当你滚动并且框离开屏幕时,该值消失.我不确定我做错了什么,Google并没有证明它有多大帮助.希望有人在这里可以帮助我. 适应器称为: adapter = new MenuAdapter(thisActivity, R.layout.menu, list);se 我的自定义ArrayAdapter中的getVIEw方法被多次调用,我认为这是有意的.问题是,我有一个动态设置的数量TextVIEw但是当你滚动并且框离开屏幕时,该值消失.我不确定我做错了什么,Google并没有证明它有多大帮助.希望有人在这里可以帮助我.

适应器称为:

adapter = new MenuAdapter(thisActivity,R.layout.menu,List);setlistadapter(adapter);

我的自定义ArrayAdapter:

public MenuAdapter(Context context,int textVIEwResourceID,ArrayList<Object> menu) {    super(context,textVIEwResourceID,menu);    this.menu = menu;    vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);    }    public VIEw getVIEw(int position,VIEw convertVIEw,VIEwGroup parent) {            VIEw v = convertVIEw;            Object cat = menu.get(position);            if (cat.getClass().equals(category.class)) {                v = vi.inflate(R.layout.category,null);                category item = (category)cat;                v.setonClickListener(null);            v.setonLongClickListener(null);            v.setLongClickable(false);                TextVIEw tt = (TextVIEw) v.findVIEwByID(R.ID.category);                tt.setText(item.getname());                  } else if (cat.getClass().equals(OrderItem.class)) {                v = vi.inflate(R.layout.menu,null);                OrderItem orderItem = (OrderItem)cat;                Item item = orderItem.getItem();                TextVIEw tt = (TextVIEw) v.findVIEwByID(R.ID.Title);                tt.setText(item.getname());                   TextVIEw bt = (TextVIEw) v.findVIEwByID(R.ID.desc);                bt.setText(item.getDescription());                TextVIEw qty = (TextVIEw) v.findVIEwByID(R.ID.qty);                qty.setID(item.getID());                Imagebutton minus = (Imagebutton) v.findVIEwByID(R.ID.qtyMinus);                minus.setTag(item);                Imagebutton plus = (Imagebutton) v.findVIEwByID(R.ID.qtyPlus);                plus.setTag(item);                      }            return v;    }

菜单布局:

<?xml version="1.0" enCoding="utf-8"?><linearLayout xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:layout_wIDth="fill_parent"    androID:layout_height="?androID:attr/ListPreferredItemHeight"    androID:padding="6dip"    androID:background="#FFFFFF">    <relativeLayout        androID:orIEntation="vertical"        androID:layout_wIDth="0dip"        androID:layout_weight="1"        androID:layout_height="fill_parent"        androID:cachecolorHint="#FFFFFF"        androID:background="#FFFFFF">        <TextVIEw            androID:ID="@+ID/Title"            androID:layout_wIDth="fill_parent"            androID:layout_height="wrap_content"            androID:layout_weight="1"            androID:gravity="center_vertical"            androID:textSize="16px"            androID:textcolor="#000000"        />        <TextVIEw            androID:ID="@+ID/desc"            androID:layout_below="@ID/Title"            androID:layout_wIDth="fill_parent"            androID:layout_height="wrap_content"            androID:layout_weight="1"            androID:textSize="11px"            androID:textStyle="italic"            androID:textcolor="#000000"        />    </relativeLayout>    <Imagebutton    androID:ID="@+ID/qtyMinus"    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    androID:src="@drawable/minus"    androID:paddingtop="15px"    androID:onClick="minusQty"  />    <TextVIEw    androID:ID="@+ID/qty"    androID:layout_wIDth="50px"    androID:layout_height="50px"    androID:textcolor="#000000"    androID:textSize="18px"    androID:gravity="center_vertical|center_horizontal"    androID:freezesText="true"    androID:background="@androID:drawable/editBox_background"/>    <Imagebutton    androID:ID="@+ID/qtyPlus"    androID:layout_wIDth="wrap_content"    androID:layout_height="wrap_content"    androID:src="@drawable/plus"    androID:paddingtop="15px"    androID:onClick="addQty" /></linearLayout>

任何帮助将不胜感激.

非常感谢.

解决方法 当你注意到时,会多次调用getVIEw().它应该没关系,因为你的数组适配器是基于它的内部数据模型的状态(数组,对象列表,等等). getVIEw()应该是幂等的,因为多次调用它不应该改变结果.

你说“当你滚动并且盒子离开屏幕时,值会消失”.注意肯定是什么意思.当您将getVIEw()中生成的其中一个视图从可见区域滚动时,当您向后滚动时,值是不同的?没有任何其他信息,我不得不说这是不可能的.原因是,除非您正在修改适配器的内部状态或更改适配器,否则您将始终为给定位置生成相同的视图.

顺便说一下,convertVIEw可以为null,所以你想做的事情,

VIEw v = convertVIEw;if (v == null) {  v = inflater.inflate(...);}// Now use v in the rest of the method
总结

以上是内存溢出为你收集整理的多次调用Android自定义ArrayAdapter getView方法 – 重置动态TextView值全部内容,希望文章能够帮你解决多次调用Android自定义ArrayAdapter getView方法 – 重置动态TextView值所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1128568.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存