为具有一些空值的列表创建适配器

时间:2013-09-01 12:49:57

标签: android android-adapter

有一个列表,我希望使用自己的自定义适配器在ListView中显示。 因此此列表中包含一些空值,还有一些“重要”非空值。

可能是这样的:

(N代表Null)

(D代表一些有价值的数据)

myList中: [N,N,D,D,N,N,D,N,D,N,N]例如。

所以我得到了我的适配器,但我无法处理列表中的空值。

这是我的适配器:

公共类ItemAdapter扩展了ArrayAdapter {

List<Item> itemList;
private Activity act;
boolean selling;

public ItemAdapter(Activity act, List<Item> itemList, boolean selling) {
    super(act, R.layout.item_view_layout, itemList);

    this.itemList = itemList;
    this.act = act;
    this.selling = selling;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {


        ViewHolder holder;
        final Item itemManipulated = itemList.get(position);

        if (convertView == null) {

            convertView = new ItemInShopView(act, itemManipulated);

            holder = new ViewHolder();
            holder.convertView = convertView;
            holder.itemNameTextView = (TextView) ((ItemView) convertView).getItemNameTextView();
            holder.iconImageView = (ImageView) ((ItemView) convertView).getItemIconImageView();
            holder.coinView = (CoinView) ((ItemInShopView) convertView).getCoinView();
            holder.coinView.init(act);
            holder.itemRarityHidedTextView = (TextView) ((ItemView) convertView).getItemRarityHidedTextView();

            convertView.setTag(holder);

        } else {
            holder = (ViewHolder) convertView.getTag();
        }


            holder.itemNameTextView.setText(itemManipulated.getName());
            holder.iconImageView.setImageResource(itemManipulated.getIcon());
            holder.itemRarityHidedTextView.setText(itemManipulated.getRarity());

            Colorer.setTextViewColorByItemRarity(holder.itemNameTextView, holder.getRarity(), act);

            if (selling) {
                holder.coinView.setCoins(itemManipulated.getSellPrice());
            } else {
                holder.coinView.setCoins(itemManipulated.getPrice());
            }

            holder.convertView.setOnClickListener(new OnClickListenerWithPreventDoubleTapper(itemManipulated));

            holder.convertView.setOnLongClickListener(new OnLongClickListener() {

                @Override
                public boolean onLongClick(View v) {
                    return false;
                }
            });

            return convertView;


}

class OnClickListenerWithPreventDoubleTapper extends OnClickListenerWithPreventDoubleTap {

    Item item;

    public OnClickListenerWithPreventDoubleTapper(Item item) {
        this.item = item;

    }

    @Override
    protected void performAction() {
        new ItemDialog(act, item).show();
    }

}

static class ViewHolder {

    TextView itemRarityHidedTextView;
    TextView itemNameTextView;
    ImageView iconImageView;
    CoinView coinView;

    View convertView;

    public String getRarity() {
        return itemRarityHidedTextView.getText().toString();
    }
}

}

我怎样才能实现一些方法来使适配器处理空值并在那里显示任何内容,或者可能显示一个没有任何内容的虚拟布局?

我无法创建没有空值的新列表并将这些新列表传递给适配器,因为空值在其他视图中具有重要意义。

我希望我的问题很明确。如果可以,请帮忙。

1 个答案:

答案 0 :(得分:0)

为什么不呢?

    if (itemManipulated != null){
        holder.itemNameTextView.setText(itemManipulated.getName());
        holder.iconImageView.setImageResource(itemManipulated.getIcon());
        holder.itemRarityHidedTextView.setText(itemManipulated.getRarity());

        Colorer.setTextViewColorByItemRarity(holder.itemNameTextView, holder.getRarity(),act);

        if (selling) {
            holder.coinView.setCoins(itemManipulated.getSellPrice());
        } else {
            holder.coinView.setCoins(itemManipulated.getPrice());
        }
   } else {
        holder.itemNameTextView.setText("No Item");
        ... (whatever default values you like)
   }

编辑: 如果您根本不想显示空值,则需要执行更复杂的操作。

getView中的

:找到第n条实际数据

getCount中的

:返回实际数据的数量

getView:
int posInArray = -1;
for (int i =0; i <= position; i++){
    posInArray++;
    while(itemList.get(posInArray) == null){
        posInArray++;
    }
}
itemManipulated = itemList.get(posInArray);
...


getCount:
int count = 0;
for(int i = 0; i < itemList.size(); i++){
    if (itemList.get(i) != null){
       count++;
    }
}
return count;