我正在尝试使用视图持有者制作自定义适配器。
Log.i(CardHolderConstants.LOGIN_INFO, "cardsize>0");
myListAdapater=new MyListAdapater(this,cardList);
listview.setAdapter(myListAdapater);
我在这里调用扩展baseadpater的类mylist。 CardList包含从数据库中检索的卡对象列表。
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方法
打印构造函数中的日志。为什么我的getview
方法没有被调用。
列表正在显示。但正在显示相同的项目。在listview中迭代的正确方法是什么
答案 0 :(得分:2)
你有
@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);
答案 1 :(得分:2)
你必须改变两件事,
从
更改getItem方法@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return null;
}
到
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return cardListForDisplay.get(arg0);
}
将其更改为以下内容,
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");
Card card = getItem(position);
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;
}
答案 2 :(得分:1)
只需从
更改此处@Override
public int getCount() {
// TODO Auto-generated method stub
return 0;
}
到
@Override
public int getCount() {
// TODO Auto-generated method stub
return cardListForDisplay.size();
}
也在这里
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
最后改变这个
class MyListAdapaterextends BaseAdapter{
到
class MyListAdapaterextends extends BaseAdapter{
答案 3 :(得分:0)
正确覆盖'getCount'....检查此方法的'return'值
答案 4 :(得分:0)
您的getCount()
方法的硬编码返回0。所以ListAdapter
认为列表对象的列表/数组中没有项目。
改变这个:
@Override
public int getCount() {
// TODO Auto-generated method stub
return 0;
}
类似于:
return sizeOfyourList;