使用自定义适配器和观点持有者的Android列表视图 [英] Android list view using custom adapter and view holder
本文介绍了使用自定义适配器和观点持有者的Android列表视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想使用视图持有人进行自定义适配器。
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);
这篇关于使用自定义适配器和观点持有者的Android列表视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文