Pau*_*ell 5 android listview android-arrayadapter
我的自定义ArrayAdapter中的getView方法被多次调用,我认为这是有意的.问题是,我有一个动态设置的数量TextView但是当你滚动并且框离开屏幕时,该值消失.我不确定我做错了什么,Google并没有证明它有多大帮助.希望有人在这里可以帮助我.
适应器称为:
adapter = new MenuAdapter(thisActivity, R.layout.menu, list);
setListAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
我的自定义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;
}
Run Code Online (Sandbox Code Playgroud)
菜单布局:
<?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>
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激.
非常感谢.
getView()将在您注意时多次调用.它应该没关系,因为你的数组适配器是基于它的内部数据模型的状态(数组,对象列表,等等).getView()应该是幂等的,因为多次调用它不应该改变结果.
你说"当你滚动并且盒子离开屏幕时,值会消失".注意肯定是什么意思.当您滚动getView()在可见区域外生成的其中一个视图时,当您向后滚动时,值是不同的?没有任何其他信息,我不得不说这是不可能的.原因是,除非您正在修改适配器的内部状态或更改适配器,否则您将始终为给定位置生成相同的视图.
顺便说一下,convertView可以为null,所以你想要做的事情,
View v = convertView;
if (v == null) {
v = inflater.inflate(...);
}
// now use v in the rest of the method
Run Code Online (Sandbox Code Playgroud)