Android的定制ArrayAdapter getView方法多次调用 - 复位动态的TextView值 [英] Android custom ArrayAdapter getView method called multiple times - resetting dynamic TextView value

查看:207
本文介绍了Android的定制ArrayAdapter getView方法多次调用 - 复位动态的TextView值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的自定义ArrayAdapter的getView方法获取调用多次,我认为它的目的是。问题是,我有一个动态设定数量的TextView,但是当您滚动和方块熄灭屏幕的价值消失。我不知道我在做什么错的,谷歌是不是证明是很大的帮助。希望这里有人能帮助我。

The getView method in my custom ArrayAdapter is getting called multiple times, which I assume it is meant to. Problem is, I have a quantity TextView which is dynamically set but when you scroll and the box goes off screen the value disappears. I am not sure what I am doing wrong and Google is not proving to be much help. Hopefully someone here can help me.

该adapater叫做:

The adapater is called:

adapter = new MenuAdapter(thisActivity, R.layout.menu, list);
setListAdapter(adapter);

我的自定义ArrayAdapter:

My Custom 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>

任何帮助将大大AP preciated。

Any help will be greatly appreciated.

非常感谢。

推荐答案

getView()你注意将被调用多次。它不应该的问题,因为你的阵列适配器是基于状态的它的内部数据模型(数组,对象列表,等等)。 getView()应以幂等调用它多次不应该改变的结果。

getView() will be called multiple times as you note. it shouldn't matter, because your array adapter is based on the state of it's internal data model (array, list of objects, whatever). getView() should be idempotent in that calling it multiple times shouldn't change the result.

你说当您滚动和方块熄灭筛选值消失。注意:知道什么意思。当您滚动的生成的观点getView一()关闭可见区域,而当你滚动回来,这个值是不同的?没有任何其他信息,我不得不说这是不可能的。其原因又是,除非你正在修改适配器的内部状态,或更改适配器,你总是会生成一个给定的位置,同样的看法。

you say "when you scroll and the box goes off screen the value disappears". note sure what mean. when you scroll one of the views generated in getView() off the visible area, and when you scroll it back, the value is different? without any other information, i'd have to say that's not possible. the reason is again that unless you are modifying the internal state of the adapter, or changing the adapter, you will always generate the same view for a given position.

顺便说一句, convertView 可以为空,所以你想要做这样的事,

by the way, convertView can be null, so you want to do something like,

View v = convertView;
if (v == null) {
  v = inflater.inflate(...);
}

// now use v in the rest of the method

这篇关于Android的定制ArrayAdapter getView方法多次调用 - 复位动态的TextView值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆