使用自定义适配器和观点持有者的Andr​​oid列表视图 [英] Android list view using custom adapter and view holder

查看:249
本文介绍了使用自定义适配器和观点持有者的Andr​​oid列表视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用视图持有人进行自定义适配器。

I am trying to make a custom adapter using a view holder.

Log.i(CardHolderConstants.LOGIN_INFO, "cardsize>0");
        myListAdapater=new MyListAdapater(this,cardList);       
        listview.setAdapter(myListAdapater);

下面我打电话延伸baseadpater类MYLIST。
CardList包含从数据库中检索卡的对象的列表。

Here i am calling the class mylist which extends baseadpater. CardList contains a list of card objects retrieved from the database.

    static class ViewHolder{
        public TextView cardId,cardNumber,cardName;

    }

    class MyListAdapater extends BaseAdapter{
        List<Card> cardListForDisplay;
         LayoutInflater inflater ; Context context;
        public MyListAdapater(Context context,List<Card> cardListForDisplay) {
            super();
            Log.i(CardHolderConstants.LOGIN_INFO, "inside mylist");
            this.cardListForDisplay = cardListForDisplay;
            this.context=context;

        }



        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return cardListForDisplay.size();
        }

        @Override
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public long getItemId(int arg0) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public View getView(int arg0, View view, ViewGroup parent) {            
            View rowView = view; 
            ViewHolder holder;
            if(rowView==null){  
                holder=new ViewHolder();
                inflater = ((Activity) context).getLayoutInflater();
                  rowView = inflater.inflate(R.layout.card_list, parent, false);                  
                  holder.cardId=(TextView)rowView.findViewById(R.id.displayCardID);
                  holder.cardName=(TextView)rowView.findViewById(R.id.displayCardName);
                  holder.cardNumber=(TextView)rowView.findViewById(R.id.displayCardNumber);
                  rowView.setTag(holder);
            }
            else{
                holder=(ViewHolder) rowView.getTag();
            }
            Log.i(CardHolderConstants.CARD_HOLDER, "inside getView class");
            for(Card card:cardListForDisplay){
                if(card!=null){
                long cardID= card.getCardId();
                String cardName=card.getCardName();
                long cardNumber=card.getCardNumber();
                if(Utils.isNumberNullOrEmpty(cardID)==false && Utils.isNumberNullOrEmpty(cardNumber)==false
                        && Utils.isStringNullOrEmpty(cardName)==false)
                 holder.cardId.setText(Long.toString(cardID));
                 holder.cardNumber.setText(Long.toString(cardNumber));
                 holder.cardName.setText(cardName);
                }
            }


            return rowView;
        }

    }
}

当类被初始化了get view方法不会被调用。结果
在日志中的构造得到printed.why是我的 getview 不会被调用的方法。
正在显示该列表。但是正在显示相同的项目。什么是列表视图

when the class is initialized the get view method is not being called.
The log in the constructor gets printed.why is my getview method not being called. the list is being displayed . but the same item is being displayed. What is the correct way of iterating within the listview

推荐答案

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return 0;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return cardListForDisplay.size();
}

也改为

public Object getItem(int arg0) {
    return arg0; // can be cardListForDisplay.get(arg0)
}

@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0; // can be cardListForDisplay.indexOf(getItem(arg0))
}

编辑:

Card card = (Card) cardListForDisplay.get(position);      
long cardID= card.getCardId();
String cardName=card.getCardName();
long cardNumber=card.getCardNumber();
holder.cardId.setText(Long.toString(cardID));
holder.cardNumber.setText(Long.toString(cardNumber));
holder.cardName.setText(cardName);

这篇关于使用自定义适配器和观点持有者的Andr​​oid列表视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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